我正在使用5.1构建我的第一个Laravel应用程序,它是一个电子商务网站.
我开始创建"静态"页面.我引用是因为页面不是从产品列表等动态生成的,但仍然从数据库中检索html.
我创建了PagesController一个Page模型,一个pages/index.blade.php和pages/show.blade.php视图,以及一个MasterTemplate.blade.php模板文件.
我routes.php看起来像:
$router->get('/', [
'uses' => 'PagesController@index',
'as' => 'pages.index'
]);
$router->get('/{page}', [
'uses' => 'PagesController@show',
'as' => 'pages.show'
]);
Run Code Online (Sandbox Code Playgroud)
这很好用,我可以查看数据库中的索引和单个页面.
我去添加导航时出现问题.由于我打算使用两个不同的导航栏(一个用于用户,一个用于管理员),我选择创建一个_navDefault.php文件以包含在MasterTemplate.
剥离多余的html看起来像:
@foreach ($pages as $page)
<li>{!! link_to_route('pages.show', $page->title, [$page->slug]) !!}</li>
@endforeach
Run Code Online (Sandbox Code Playgroud)
这可以很好地生成链接并且可以正常工作.但是因为我PagesController:
...
public function index()
{
$pages = $this->page->get();
return view('pages.index', compact('pages'));
}
...
Run Code Online (Sandbox Code Playgroud)
$pages只存在于index视图上,因此导航到show视图会给我一个$pages未定义的错误,这非常有意义.
我可以定义$pages的show方法,但是我也会有其他的控制器,如ProductController和CartController,这将有自己的网页,我需要在导航条,我不能很好地包括$pages,$products和$cart每一个index与show方法为每个控制器.
我仍然是MVC的新手,所以我不确定使用导航控制器/模型或其他方法来处理这个问题的最佳方法.
使用多个控制器实现动态导航栏的正确方法是什么?
这就是我能够在我的应用程序中随处可见动态导航栏的方法.
在以下boot方法中测试以下内容AppServiceProvider:
View::composer('*', function($view)
{
$view->with('pages', Page::all());
});
Run Code Online (Sandbox Code Playgroud)
该*方法的所有意见都会得到$pages.
您现在可以将其提取到专用于查看作曲家的服务提供商.
| 归档时间: |
|
| 查看次数: |
12696 次 |
| 最近记录: |