Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在Laravel 5中进行动态导航的正确方法_Php_Laravel 5 - Fatal编程技术网

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

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

我正在使用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'
]);
@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,您似乎已链接到自己的网站。如果你这样做了,你需要披露这是你的网站。如果你不透露这是你自己的网站,它通常被认为是垃圾邮件。请参阅:和。除了将其添加到引导功能之外。你可以扩展一下“你现在可以把它解压缩到一个专门为视图编写者服务的服务提供商那里。”现在这种方法在官方文档中有了。