Laravel - 全局设置变量

时间:2014-09-10 11:05:12

标签: php variables laravel laravel-4 global-variables

我的应用中有几个vars,我想通过多个视图和请求分享。基本上我有一个自定义布局,我加载:

@section('stylesheet')
    {{ HTML::style(URL::to('custom_stylesheet/'.$slug)) }}
@stop  

我不得不将“slug”var发送到我需要的每个请求和操作和/或控制器,我需要一些。这是一个从起点到结账的商店,最后一步。

我怎样才能实现这一目标? View :: share()是一个解决方案还是一个cookie?

网址结构如下:

www.domain.tld/name/{client_slug}/{event_slug}/<all other variables>  

like / overview或/ checkout或/ details / {event_id}

谢谢!

2 个答案:

答案 0 :(得分:2)

如果您需要指定视图,请使用View Composer:

View::composer(['view-a', 'view-b'], function($view)
{
    $client_slug = 'whatever you need to do to calculate the slug';

    $view->with('client_slug', $client_slug);

    $view->with('event_slug', $event_slug);

    $view->with('variable1', $variable1);
});

或者,正如您所说,查看分享与所有人分享:

View::share('client_slug', $client_slug);

您可以为此目的创建一个文件,例如app/composers.php,并将其加载到app/start/global.php中:

require app_path().'/composers.php';

您也可以考虑使用Session vars,它可以通过多个请求保存数据:

Session::put('client_slug', $client_slug);

并通过

获取
$client slug = Session::put('client_slug');

但如果这只是一个View事物,View Composers就是你的选择。

使用Session和View Composer这些togheter很简单,你可以在一个请求中设置:

Session::put('client_slug', $client_slug);

在下一个请求中,您可以将其发送到您的观看次数:

View::composer(['view-a', 'view-b'], function($view)
{
    if (Session::has('client_slug'))
    {
        $view->with('client_slug', Session::get('client_slug'));
    }
    else
    {
        $view->with('client_slug', 'default-slug-or-whatever-you-would-do');
    }
});

答案 1 :(得分:0)

我很确定你能做到这一点:

if (Cache::has('slug'))
{
    View::share('slug', Cache::get('slug'););
}

然后只需将它放在路径文件中,或者可能放在基本控制器构造函数中,无论你想要它。

然后当你第一次得到slu ::

Cache::put('slug', $slug, 60); //60 minutes