在Laravel 5中进行动态导航的正确方法

sha*_*arf 6 php laravel-5

我正在使用5.1构建我的第一个Laravel应用程序,它是一个电子商务网站.

我开始创建"静态"页面.我引用是因为页面不是从产品列表等动态生成的,但仍然从数据库中检索html.

我创建了PagesController一个Page模型,一个pages/index.blade.phppages/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未定义的错误,这非常有意义.

我可以定义$pagesshow方法,但是我也会有其他的控制器,如ProductControllerCartController,这将有自己的网页,我需要在导航条,我不能很好地包括$pages,$products$cart每一个indexshow方法为每个控制器.

我仍然是MVC的新手,所以我不确定使用导航控制器/模型或其他方法来处理这个问题的最佳方法.

使用多个控制器实现动态导航栏的正确方法是什么?

use*_*178 9

这就是我能够在我的应用程序中随处可见动态导航栏的方法.

在以下boot方法中测试以下内容AppServiceProvider:

View::composer('*', function($view)
{
    $view->with('pages', Page::all());
});
Run Code Online (Sandbox Code Playgroud)

*方法的所有意见都会得到$pages.

您现在可以将其提取到专用于查看作曲家的服务提供商.