我的应用中有几个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}
谢谢!
答案 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