我刚刚开始使用Laravel,我正在整理一个快速的博客网站作为练习。
我有一个帖子模型,其中包含内容。我可以列出帖子,显示一个帖子,然后创建帖子。
我创建了一个与帖子相关的类别表和模型(帖子属于类别)。我想有一个下拉菜单,列出我的导航布局中涵盖整个应用程序的所有类别。
允许视图在整个应用中访问该数据的最佳做法是什么?似乎错误的是需要将以下内容添加到每个控制器方法中,以便我可以传递该数据。
$categories = Category::all();
谢谢!
答案 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());
}
}