繁体   English   中英

Laravel-全局设置变量

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM