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

我使用了
共享
共享
。我不想将此数据共享给我的所有视图,只想共享具有相同标题的特定视图。例如,“联系我”使用不同的标题。