在Laravel中为全局布局提供模型

时间:2015-02-04 21:52:55

标签: php laravel laravel-4

我刚刚开始使用Laravel,我正在整理一个快速的博客网站作为练习。

我有一个帖子模型,其中包含内容。我可以列出帖子,显示一个帖子,然后创建帖子。

我创建了一个与帖子相关的类别表和模型(帖子属于类别)。我想有一个下拉菜单,列出我的导航布局中涵盖整个应用程序的所有类别。

允许视图在整个应用中访问该数据的最佳做法是什么?似乎错误的是需要将以下内容添加到每个控制器方法中,以便我可以传递该数据。

$categories = Category::all(); 

谢谢!

2 个答案:

答案 0 :(得分:5)

这就是View Composers的目的。

您可以注册每次呈现某个视图时调用的回调函数:

View::composer('layout', function($view){
   $view->with('categories', Category::all());
});

您可以将此代码放入app/filters.php或创建新的app/composers.php,并将其包含在app/start/global.php的末尾,其中包含:

require app_path().'/composers.php';

答案 1 :(得分:4)

Laravel 5今天发布。所以这就是你在新Laravel中的表现。为此,您需要使用View Composer [docs]

// App/Providers/ComposerServiceProvider.php
<?php namespace App\Providers;

use View;
use Illuminate\Support\ServiceProvider;

class ComposerServiceProvider extends ServiceProvider {

    /**
     * Register bindings in the container.
     *
     * @return void
     */
    public function boot()
    {
        // Using class based composers...
        View::composer('posts.*', 'App\Http\ViewComposers\PostComposer');
    }

}

// App/Http/Composers/PostComposer.php
<?php namespace App\Http\Composers;

use Illuminate\Contracts\View\View;

class PostComposer {

    /**
     * Bind data to the view.
     *
     * @param  View  $view
     * @return void
     */
    public function compose(View $view)
    {
        $view->with('categories', Categories::all());
    }

}