【问题标题】:Laravel - set variable globallyLaravel - 全局设置变量
【发布时间】:2014-09-10 11:05:12
【问题描述】:

我的应用中有一些变量,我想通过多个视图和请求共享它们。基本上我有一个像这样加载的自定义布局:

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

我必须以某种方式将“slug”变量发送到我需要的每个请求和操作和/或控制器,我需要一些。这是从开始页面到结帐的最后一步的商店。

我怎样才能做到这一点? View::share() 是解决方案还是 cookie?

网址结构是这样的:

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

喜欢 /overview 或 /checkout 或 /details/{event_id}

谢谢!

【问题讨论】:

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


    【解决方案1】:

    如果需要指定视图,请使用 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 很简单,你可以在一个请求中设置:

    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');
        }
    });
    

    【讨论】:

    • 但是如何设置这个变量呢?我可以在第一个请求中获取它们并将它们保存到作曲家吗?
    【解决方案2】:

    我很确定你可以做到这一点:

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

    然后把它放在你的路由文件中,或者你的基本控制器构造函数中,无论你想要什么。

    那么当你第一次得到蛞蝓时:

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

    【讨论】:

    • 但它对多个请求有效吗?
    • 否 - 但你可以缓存它吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-13
    • 1970-01-01
    • 1970-01-01
    • 2020-11-18
    • 2019-07-18
    相关资源
    最近更新 更多