View 在每个子视图中共享数据
我已经创建了一个布局,其中包含一个标题和定期更改的主要内容View 在每个子视图中共享数据,view,laravel-4,blade,View,Laravel 4,Blade,我已经创建了一个布局,其中包含一个标题和定期更改的主要内容 @include('tshop.includes.header') @yield('content') @include('tshop.includes.footer') 我创建了下面的视图生成器,以便将篮中的产品传递到标题中的弹出对话框 View::composer('tshop.includes.header', function($view) { $basket = App::make('BasketInt
@include('tshop.includes.header')
@yield('content')
@include('tshop.includes.footer')
我创建了下面的视图生成器,以便将篮中的产品传递到标题中的弹出对话框
View::composer('tshop.includes.header', function($view)
{
$basket = App::make('BasketInterface');
$view->with( 'productsIterator' , $basket->getIterator() );
});
问题是我想在所有视图中共享它,包括主要内容
我试着使用share
(和shares
)函数,这与View::share
相同,但事实并非如此
View::composer('tshop.includes.header', function($view)
{
$basket = App::make('BasketInterface');
$view->share( 'productsIterator' , $basket->getIterator() );
});
我还尝试在布局中使用视图生成器,但没有成功
View::composer('tshop.layouts.default', function($view)
{
$basket = App::make('BasketInterface');
$view->shares( 'productsIterator' , $basket->getIterator() );
});
接下来,我将下面的过滤器放置到我的构造函数中
$this->beforeFilter(function()
{
$basket = App::make('BasketInterface');
View::share('productsIterator' , $basket->getIterator());
});
这很有效,但我使用了几个控制器,所以这不是最好的方法。我知道我可以创建一个基本控制器类并对其进行扩展,但没有更好的方法吗?您可以使用
App::before
事件,使用View::share
将一些数据全局共享给所有视图,例如:
App::before(function($request) {
$basket = App::make('BasketInterface');
View::share( 'productsIterator' , $basket->getIterator() );
});
现在,您可以从任何视图访问$productsIterator
,顺便说一句,您使用的是共享
,而不是共享
。您也可以使用视图
编写器,而不是使用视图::共享
,如下所示:
View::composer('tshop.includes.header', function($view) {
$basket = App::make('BasketInterface');
return $view->with( 'productsIterator' , $basket->getIterator() );
});
在这种情况下,您需要使用
$view->with()
方法,而不是share
我使用了共享
和共享
。我不想将此数据共享给我的所有视图,只想共享具有相同标题的特定视图。例如,“联系我”使用不同的标题。