laravel 5中的全局查询

时间:2015-05-22 05:09:17

标签: php laravel

控制器:

$categories = Categories::get();
return view('coolpage', ['categories' => $categories]);

Blade View:

<ul>
@foreach ($categories as $category)
    <li><a href="{{ secure_url($category->alias) }}">{{ $category->title }}</a></li>
@endforeach
</ul>

这适用于个人观点。

我希望能够在每个页面上显示这些类别(这将用作标题导航栏中的下拉菜单)。我的app.blade.php包含标题html和@yield('content')。我能想到查询类别的唯一方法是以某种方式将它放在我的路径文件中......我很确定这不是可行的方法。

我希望得到建议/例子。

3 个答案:

答案 0 :(得分:0)

一种解决方案是使用Laravel View Composers将数据绑定到视图。

答案 1 :(得分:0)

the Laravel documentation中所述,您可以使用通配符视图编辑器来完成此任务。

首先,您要为视图作曲家设置service provider,并使用基于闭包的合成器,该合成器将应用于每个页面(*通配符):

<?php namespace App\Providers;

use View;
use Illuminate\Support\ServiceProvider;

class ComposerServiceProvider extends ServiceProvider {

    /**
     * Register bindings in the container.
     *
     * @return void
     */
    public function boot()
    {
        View::composer('*', function($view)
        {
            //
        });
    }

    /**
     * Register
     *
     * @return void
     */
    public function register()
    {
        //
    }

}

然后,您需要将服务提供程序添加到config / app.php中的providers数组中。这将注册此服务提供者,以便在每次加载页面时调用视图编辑器。

然后,您可以将所有Categories的集合绑定到所有视图,方法是将其添加到通配符视图编辑器中,如下所示:

public function boot()
{
    View::composer('*', function($view)
    {
        $view->with('categories', \App\Categories::all());
    });
}

答案 2 :(得分:0)

所有,@ jakeOpena说的都是真的,View Composers是最好的解决方案。

这是我在route.php中的例子:

View::composer('layouts.left_navbar_menu', function($view) {
 $menu = App::make('LeftNavMenu')->menuBilder();
 $view->with('name', $menu);
});

我的观点&#34; layouts / left_navbar_menu&#34;包含在主模板中,如下所示:

@include('layouts.boot_left_navbar_menu')