用于基础布局的Laravel全局变量



我想在每个页面上展示一些东西,比如$gameAccounts = Auth::user()->gameAccounts()->get();

在每个页面上全局呈现这个变量的最佳方法是什么?

如果您只需要视图,您可以在AppServiceProvider中使用视图编写器

public function boot()
{
    View::composer('layouts.base', function ($view) {
        $view->with('gameAccounts', Auth::user()->gameAccounts);
    });
}

如果你需要全局的,你可以把它存储在一个配置也在AppServiceProvider

对于共享功能,我建议编写一个trait。这个特性可以在所有控制器中使用,并为所有控制器提供相同的功能。

例子:

trait GameSettingsTrait 
{
    public function getUserGameAccounts()
    {
        return Auth::user()->gameAccounts()->get();
    }
}

在你的控制器做:

class IndexController extends Controller
{
    use GameSettingsTrait;
    ...

另一种方法是将逻辑放在app/Http/Controllers/Controller.php的基本控制器中。顺便说一句,你可以看到它已经在其他功能中使用了trait。

你需要使用view composer

看文档

https://laravel.com/docs/5.2/views view-composers

使用view composer是最好的方法。只需将这些行添加到AppServiceProvider.php中的引导方法中:

public function boot()
{
    //
    view()->composer('*', function ($view) {
        $view->with('user', Auth::user()->gameAccounts()->get());
    });
}

最新更新