Php 在Laravel 5中进行动态导航的正确方法
我正在使用5.1构建我的第一个Laravel应用程序,这是一个电子商务网站 我从创建“静态”页面开始。我引用这句话是因为页面不是从产品列表等动态生成的,但html仍然是从数据库中检索的 我创建了一个Php 在Laravel 5中进行动态导航的正确方法,php,laravel-5,Php,Laravel 5,我正在使用5.1构建我的第一个Laravel应用程序,这是一个电子商务网站 我从创建“静态”页面开始。我引用这句话是因为页面不是从产品列表等动态生成的,但html仍然是从数据库中检索的 我创建了一个PagesController、一个Page模型、pages/index.blade.php和pages/show.blade.php视图,以及一个MasterTemplate.blade.php模板文件 我的routes.php看起来像: $router->get('/', [ 'us
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'
]);
@foreach ($pages as $page)
<li>{!! link_to_route('pages.show', $page->title, [$page->slug]) !!}</li>
@endforeach
这很好,我可以查看我的索引和数据库中的各个页面
我的问题发生在我添加导航时。因为我计划使用两个不同的导航栏(一个用于用户,一个用于管理员),所以我选择创建一个\u navDefault.php
文件以包含在主模板中
剥离多余的html,看起来像:
$router->get('/', [
'uses' => 'PagesController@index',
'as' => 'pages.index'
]);
$router->get('/{page}', [
'uses' => 'PagesController@show',
'as' => 'pages.show'
]);
@foreach ($pages as $page)
<li>{!! link_to_route('pages.show', $page->title, [$page->slug]) !!}</li>
@endforeach
$pages
仅存在于索引
视图中,因此导航到显示
视图时会出现一个错误,$pages
未定义,这非常有意义
我可以在show
方法中定义$pages
,但我也会有其他控制器,如ProductController
和CartController
,它们会在导航栏中有自己需要的页面,而且我不能很好地包括$pages
,$products
,以及每个控制器的每个索引中的$cart
和显示方法
我还是MVC的新手,所以我不确定用导航控制器/模型或其他什么来处理这个问题的最佳方法
使用多个控制器实现动态导航栏的正确方法是什么?如果我正确理解了您的问题,您需要为导航创建局部视图,并使用视图生成器确保局部视图具有正确的数据
这就是我如何在我的应用程序中随处可见我的动态导航栏
在AppServiceProvider的boot
方法中测试以下内容:
...
public function index()
{
$pages = $this->page->get();
return view('pages.index', compact('pages'));
}
...
View::composer('*', function($view)
{
$view->with('pages', Page::all());
});
*
表示所有视图都将收到$pages
现在,您可以将其解压缩到一家专门为view Composer提供服务的服务提供商处。[edit]这是我的项目,我随时可以在github上获取它的贡献
一个非常适合您的问题的Laravel 5.4支持包,用于创建动态、数据库驱动、支持引导的下拉菜单
使用以下方式安装:
composer需要secrethash/dropmenu
用法:
use Dropmenu;
class SampleController extends Controller {
public function index() {
$menu = Dropmenu:: display('menuName');
return view('some.view', ['menu' => $menu]);
}
}
或者只是在刀片模板中使用它
@extends('demoLayout')
@section('menu')
{!! Dropmenu:: display('menuName') !!}
@endsection
完整文档:根据包含与用户名相同的目录和/或子域的链接URL,您似乎已链接到自己的网站。如果你这样做了,你需要披露这是你的网站。如果你不透露这是你自己的网站,它通常被认为是垃圾邮件。请参阅:和。除了将其添加到引导功能之外。你可以扩展一下“你现在可以把它解压缩到一个专门为视图编写者服务的服务提供商那里。”现在这种方法在官方文档中有了。