Laravel - 动态设置全局变量

时间:2017-11-05 00:02:28

标签: php laravel laravel-5 global-variables

我需要全局设置变量,但它应该是动态的,意味着我可以(在某个仪表板页面/视图上)设置此变量。

我发现,我可以通过ServiceProvider为某些或所有视图设置全局变量,但是如何设置呢?把它放到会话中会更好吗?

class AppServiceProvider extends ServiceProvider
{
    public function boot()
    {
        // Using view composer for specific view
        view()->composer('*',function($view) {
            $view->with('var_id', ?????????); 
        });
    }
}  

应该有一个链接说明(例如)localhost / setVar1 / {id}(setVar1是一个examplename)。它应该在用户注销之前有效(这里不是问题)。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

您还可以在中间件中使用View::share。因此,您在routes/web.php中定义路由将使用中间件。

例如:我的'/user/'需要变量'user','/user/'内的所有路由都需要相同的变量,所以我这样做:

在中间件文件中,我定义View::share('user', $user),并在routes/web.php中定义:

Route::group(['middleware' => 'MyMiddlewareName'], function() {
 // All the routes
});

或者放入需要该中间件的所有路由,只需将->middleware('MyMiddlewareName');放在路由中,就像这样

Route::get('user', function () {
    //
})->middleware('MyMiddlewareName');

不要忘记在Kernel.php中设置中间件,如下所示:

'MyMiddlewareName' => \App\Http\Middleware\MyMiddlewareName::class

在中间件中,您可以验证用户是否在您需要的URL中。

答案 1 :(得分:1)

这就是我目前所做的,我使用观察者和缓存...我不知道这是最好的方式,它只是一个建议

Configuration是我的样本模型,当我有更新或创建新数据时我加载所有配置,我用观察者听

ConfigObserver充当任何配置更改的侦听器并更新缓存

class ConfigObserver
{

    public function created(Configuration $setting)
    {
        $this->updateConfig();
    }

    public function deleted(Configuration $setting)
    {
        //
    }

    public function updated(Configuration $setting)
    {
        $this->updateConfig();
    }

    private function updateConfig()
    {
        //store in cache
        Cache::forever('configuration', Configuration::pluck('value', 'key')->toArray());
    }
}

在引导方法的AppServiceProvider中,将观察者设置为配置模型

Configuration::observe(new ConfigObserver());

然后,view()AppServiceProvider

中的用户Middleware方法
view()->composer('*', function ($view) {
      //check if cache is not available, just query it back and store, then pass to view
      $config = Cache::get('configuration', function () {
          return Cache::forever('configuration', Configuration::pluck('value', 'key')->toArray());
      });
      $view->with('config', $config);
});