在Laravel中,我们都以非常相同的方式将数据传递给我们的视图
$data = array(
'thundercats' => 'Hoooooooooooh!'
);
return View::make('myawesomeview', $data);
但是有没有办法在视图中添加默认变量而不必在$data
中反复声明?这对于重复诸如用户名,PHP逻辑甚至CSS样式之类的变量非常有用,如果站点需要它的话。
答案 0 :(得分:13)
视图作曲家是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');
答案 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文档:
您还可以在所有视图中共享一段数据:
查看::分享('名称','史蒂夫');
答案 3 :(得分:0)
是的,绝对有办法 - 请见view composers。
您可以使用它将数据添加到视图或视图集。