[英]Laravel - set variable globally
我的应用程序中有几个变量,希望通过多个视图和请求进行共享。 基本上,我有一个自定义布局,我会像这样加载:
@section('stylesheet')
{{ HTML::style(URL::to('custom_stylesheet/'.$slug)) }}
@stop
我必须以某种方式将“子弹”变量发送到我需要的每个请求,操作和/或控制器,并且我需要一些。 这是一家从开始到结帐,最后一步的商店。
我该如何实现? View :: share()是解决方案还是Cookie?
URL结构是这样的:
www.domain.tld/name/{client_slug}/{event_slug}/<all other variables>
例如/ overview或/ checkout或/ details / {event_id}
谢谢!
如果需要指定视图,请使用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::put('client_slug', $client_slug);
并获得它
$client slug = Session::put('client_slug');
但是,如果仅这是View的话,View Composers就是您的最佳选择。
使用Session和View Composer它们非常简单,您可以在一个请求中进行设置:
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');
}
});
我很确定您可以这样做:
if (Cache::has('slug'))
{
View::share('slug', Cache::get('slug'););
}
然后将其放置在您的路由文件中,或者放置在您的基本控制器构造器中,无论您想要放置在哪里。
然后,当您第一次被给予子弹时:
Cache::put('slug', $slug, 60); //60 minutes
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.