如何在Laravel中使用全局变量

时间:2018-01-03 17:55:07

标签: laravel laravel-5 global-variables

是否可以在多个视图之间共享和更改某些变量?例如,我想要一个将在所有视图之间共享的变量$ user。当用户记录变量时,如果用户注销,则取消设置该变量。我无法实现请求使用 以下组合: 在AppServiceProvider中:

view()->share('var', 1);

在控制器中:

$var = view()->shared('var');.
$var ++;
view()->share('var', var);
return view(''', 'var'=>$var)

每次重新加载页面时,$ var总是相同的(2)。

2 个答案:

答案 0 :(得分:1)

  

我希望有一个变量$ user,将在所有视图之间共享

您应该使用auth()->user()在任何视图中获取经过身份验证的用户实例。

但如果您因某些原因不想使用它,则可以使用view composer在多个视图之间共享变量。

仅当您想要与所有视图共享变量时,

share()方法才有用。要使其正常运行,请将view()->share('key', 'value')添加到服务提供商的boot()方法中。

此外,控制器中的代码看起来像是要在视图之间共享数据,而在请求之间共享数据。请使用session

保存数据:

session(['key' => 'value']);

要在另一个请求中获取数据:

session('key');

答案 1 :(得分:1)

最好添加其他服务提供商。看看我的提供者:

  <?php

     namespace App\Providers;

     use Request;
     use Illuminate\Support\ServiceProvider;


 class ViewComposerServiceProvider extends ServiceProvider
{
public function boot()
{

   $this->globalThings();
   //call another globals' function here
}

public function register()
{
    //
}

/**
 * Get the golbals
 */
private function globalThings()
{
    view()->composer(array('*.*'),function($view){
        //get the data however you want it!
        $view->with('global', Model::where('field','value')->get());
    });
}

并且不要忘记将服务提供者添加到提供者列表是config / app.php

        App\Providers\ViewComposerServiceProvider::class,