基础布局的Laravel全局变量

时间:2016-06-24 14:25:04

标签: php laravel model-view-controller controller laravel-5.2

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

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

4 个答案:

答案 0 :(得分:1)

如果您只需要视图,则可以在AppServiceProvider

中使用视图编辑器
public function boot()
{
    View::composer('layouts.base', function ($view) {
        $view->with('gameAccounts', Auth::user()->gameAccounts);
    });
}

如果您需要全局,则可以将其存储在AppServiceProvider中的配置中。

答案 1 :(得分:0)

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

示例:

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

在您的控制器中执行:

class IndexController extends Controller
{
    use GameSettingsTrait;

    ...

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

答案 2 :(得分:0)

您需要使用视图编辑器。

查看文档。

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

答案 3 :(得分:0)

使用视图编辑器是执行此操作的最佳方式。 只需将此行添加到引导方法内的AppServiceProvider.php中:

public function boot()
{
    //

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