$data = array(
'thundercats' => 'Hoooooooooooh!'
);
return View::make('myawesomeview', $data);
但是是否有一种方法可以在视图中添加默认变量,而不必在$data
中一遍又一遍地声明它?对于重复使用的变量,如用户名、PHP逻辑甚至CSS样式(如果网站需要),这将非常有帮助。
视图组合器是在创建视图时调用的回调或类方法。如果您有想要绑定到应用程序中每次创建视图时给定视图的数据,视图组合器可以将该代码组织到一个单独的位置。因此,视图组合器可以像“视图模型”或“展示者”一样起作用。
定义视图组合器:
View::composer('profile', function($view)
{
$view->with('count', User::count());
});
现在每次创建个人资料视图时,计数数据将会绑定到该视图中。在您的情况下,可能是针对id
:
View::composer('myawesomeview', function($view)
{
$view->with('id', 'someId');
});
每当您使用以下方法创建视图时,$id
将对您的 myawesomeview
视图可用:
View::make('myawesomeview', $data);
您还可以将视图合成器同时附加到多个视图:
View::composer(array('profile','dashboard'), function($view)
{
$view->with('count', User::count());
});
如果您更喜欢使用基于类的 Composer,这将通过应用程序 IoC容器解决,并且您可以这样做:
View::composer('profile', 'ProfileComposer');
视图组合器类应该这样定义:
class ProfileComposer {
public function compose($view)
{
$view->with('count', User::count());
}
}
有几种方法可以实现,目前我已经试验了一些。
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.使用View Share,在模板中广泛使用它。
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', '');
}
@enchance,作为您在评论中提到的使用“*”的替代方法,也许View::share也能帮助您。 Laravel文档中提到:
您还可以在所有视图之间共享数据:
View::share('name','Steve');
'*'
而不是指定特定视图。效果非常好。 - enchanceView::make('_myPartial', $data);
?但是,如何在全局范围内放置它,并且如果需要,我如何从我的控制器中覆盖$data
? - Sebastian Corneliu Vîrlan