是否可以在多个视图之间共享和更改某些变量?例如,我想要一个将在所有视图之间共享的变量$ user。当用户记录变量时,如果用户注销,则取消设置该变量。我无法实现请求使用 以下组合: 在AppServiceProvider中:
view()->share('var', 1);
在控制器中:
$var = view()->shared('var');.
$var ++;
view()->share('var', var);
return view(''', 'var'=>$var)
每次重新加载页面时,$ var总是相同的(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,