【发布时间】:2017-06-24 13:41:03
【问题描述】:
我正在使用 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'
]);
这很好用,我可以查看数据库中的索引和各个页面。
当我去添加我的导航时出现了我的问题。由于我计划使用两个不同的导航栏(一个用于用户,一个用于管理员),我选择创建一个 _navDefault.php 文件以包含在 MasterTemplate 中。
去掉多余的 html 它看起来像:
@foreach ($pages as $page)
<li>{!! link_to_route('pages.show', $page->title, [$page->slug]) !!}</li>
@endforeach
这会很好地生成链接并且它们可以工作。但是因为我的PagesController:
...
public function index()
{
$pages = $this->page->get();
return view('pages.index', compact('pages'));
}
...
$pages 仅存在于 index 视图中,因此导航到 show 视图会给我一个错误,即 $pages 未定义,这很有意义。
我可以在show 方法中定义$pages,但我也会有其他控制器,例如ProductController 和CartController,它们将在导航栏中有自己的页面,我可以'很好地在每个控制器的每个 index 和 show 方法中包含 $pages、$products 和 $cart。
我对 MVC 还很陌生,所以我不确定使用导航控制器/模型或其他东西的最佳方法。
使用多个控制器实现动态导航栏的正确方法是什么?
【问题讨论】: