Laravel附带两个开箱即用的身份验证控制器,位于
App\Http\Controllers\Auth
命名空间中。...
您可以通过Auth门面访问经过身份验证的用户:
$user = Auth::user();
我已成功登录,并且我已重定向到AuthController.php
中定义的正确位置,但现在我需要访问大多数$user
对象我的观点,例如检查用户的信息,访问权限等等。
如何在我的所有观看中正确提供$user
变量的访问权限?
答案 0 :(得分:1)
Laracast的用户imJohnBen询问how a Laravel 5 service provider can be used to share view variables。他后来分享了他如何使用现有ComposerServiceProvider
并添加GlobalComposer
以便能够在所有视图上共享变量。
我按照他的回答但是有一个缺失的步骤。我无法为Laracast论坛做出贡献,从而导致创建StackOverflow问题。
我在这里使用的Laravel版本是Laravel 5.2.*
。
找到现有的ComposerServiceProvider
课程。我在vendor/laravel/framework/src/Illuminate/Foundation/Providers/ComposerServiceProvider.php
找到了我的。
导入/引用文件顶部的ViewFactory
依赖项。
use Illuminate\Contracts\View\Factory as ViewFactory;
添加boot
方法,如果已存在,则进行修改。确保注入ViewFactory
(在引导函数中将其添加为参数):
/**
* Register bindings in the container.
*
* @return void
*/
public function boot(ViewFactory $view)
{
$view->composer('*', 'App\Http\ViewComposers\GlobalComposer');
}
ViewComposers
文件夹中创建一个app/Http
文件夹。在GlobalComposer.php
文件夹中创建一个ViewComposers
文件,其中包含以下内容:
<?php
namespace App\Http\ViewComposers;
use Illuminate\Contracts\View\View;
use Illuminate\Support\Facades\Auth;
class GlobalComposer {
/**
* Bind data to the view.
*
* @param View $view
* @return void
*/
public function compose(View $view)
{
$view->with('user', Auth::user());
}
}
(缺少的步骤)最后,通过转到config/app.php
文件确保所有内容都已连线,并确保ComposerServiceProvider
在您的提供商列表中。
'providers' = [
/*
* Laravel Framework Service Providers...
*/
Illuminate\Auth\AuthServiceProvider::class,
Illuminate\Broadcasting\BroadcastServiceProvider::class,
// etc...
Illuminate\Foundation\Providers\ComposerServiceProvider::class,
]
之后,$user
变量以及您在GlobalComposer
中定义的任何其他变量都可以在您呈现的任何视图中访问。