Laravel:传递默认变量进行查看

enc*_*nce 5 php laravel

在Laravel中,我们都以几乎相同的方式将数据传递给我们的视图

$data = array(
    'thundercats' => 'Hoooooooooooh!'
);
return View::make('myawesomeview', $data);
Run Code Online (Sandbox Code Playgroud)

但是有没有办法在视图中添加默认变量而不必一遍又一遍地声明它$data?这对于重复诸如用户名,PHP逻辑甚至CSS样式之类的变量非常有用,如果站点需要它的话.

The*_*pha 13

使用View Composers

视图组合器是在创建视图时调用的回调或类方法.如果每次在整个应用程序中创建视图时都希望绑定到给定视图的数据,则视图编辑器可以将该代码组织到一个位置.因此,视图编辑器可以像"视图模型"或"演示者"那样起作用.

定义View Composer:

View::composer('profile', function($view)
{
    $view->with('count', User::count());
});
Run Code Online (Sandbox Code Playgroud)

现在,每次创建配置文件视图时,计数数据都将绑定到视图.在您的情况下,它可能是id:

    View::composer('myawesomeview', function($view)
    {
        $view->with('id', 'someId');
    });
Run Code Online (Sandbox Code Playgroud)

因此,每次使用以下内容创建视图时$id,您的myawesomeview视图都可用:

View::make('myawesomeview', $data);
Run Code Online (Sandbox Code Playgroud)

您还可以同时将视图编辑器附加到多个视图:

View::composer(array('profile','dashboard'), function($view)
{
    $view->with('count', User::count());
});
Run Code Online (Sandbox Code Playgroud)

如果您希望使用基于类的编写器,它将提供通过应用程序IoC容器解析的好处,您可以这样做:

View::composer('profile', 'ProfileComposer');
Run Code Online (Sandbox Code Playgroud)

应该像这样定义视图作曲家类:

class ProfileComposer {
    public function compose($view)
    {
        $view->with('count', User::count());
    }
}
Run Code Online (Sandbox Code Playgroud)

文档,你也可以阅读这篇文章.

  • 为了定位所有视图,我使用了''*'`而不是指定特定的视图.工作就像一个魅力. (8认同)