我想在每个页面上展示一些东西,比如$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());
});
}