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

时间:2013-07-15 00:16:32

标签: php laravel

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

$data = array(
    'thundercats' => 'Hoooooooooooh!'
);
return View::make('myawesomeview', $data);

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

4 个答案:

答案 0 :(得分:13)

使用View Composers

  

视图作曲家是a时调用的回调或类方法   视图已创建。如果您有想要绑定到给定视图的数据   每次在整个应用程序中创建视图时,都会显示一个视图   作曲家可以将该代码组织到一个位置。因此,   视图作曲家的功能可能类似于“视图模型”或“演示者”。

定义View Composer:

View::composer('profile', function($view)
{
    $view->with('count', User::count());
});

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

    View::composer('myawesomeview', function($view)
    {
        $view->with('id', 'someId');
    });

因此,每次使用以下内容创建视图时$id视图都可用{/ 1}}

myawesomeview

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

View::make('myawesomeview', $data);

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

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

视图编辑器类应该像这样定义:

View::composer('profile', 'ProfileComposer');

Documentation您也可以read this article

答案 1 :(得分:3)

有几种方法,到目前为止我一直在试验一些。

1.使用单身,你可以把它放在routes.php

App::singleton('blog_tags', function() {
  return array(
    'Drupal'    => 'success',
        'Laravel'   => 'danger',
        'Symfony'   => 'dark',
        'Wordpress' => 'info'
    );
});

2.使用设置包,请在此处下载。 https://github.com/Phil-F/Setting。您可以将其放在控制器或模板中。

Setting::set('title', 'Scheduler | Mathnasium');

3.使用查看共享,在模板中使用它

Controller: Views::share('theme_path', 'views/admin/');
Template: <link href="{{ $theme_path }}/assets/bootstrap.min.css"/>

4.我目前的样本设置,我在HomeController中编写了一个构造。

public function __construct()
{
    // Define a theme namespace folder under public
    View::addLocation('../public/views/admin');
    View::addNamespace('admin', '../public/views/admin');
    View::share('theme_path', 'views/admin/');


    // Set default page title
    Setting::set('title', 'Scheduler | Mathnasium');
    Setting::set('description', 'daily customer scheduler.');
    Setting::set('keywords', ['Reservation', 'Planner']);
    Setting::set('page-title', '');
}

答案 2 :(得分:1)

@enchance,作为使用'*'的替代方法,如评论中所述,也许View :: share也可以帮到你。来自Laravel文档:

  

您还可以在所有视图中共享一段数据:

     

查看::分享('名称','史蒂夫');

摘录自http://laravel.com/docs/responses

答案 3 :(得分:0)

是的,绝对有办法 - 请见view composers

您可以使用它将数据添加到视图或视图集。