0

我已将 Laravel 从 4.2 升级到 laravel5.3,但我无法访问控制器构造函数内部的身份验证数据

我有以下中间件,但它对我不起作用

use App\Http\Controllers\BaseController;

use Closure;
use Illuminate\Contracts\Auth\Guard;
use Redirect;
use Auth;
use App\User;


class DashboardController extends BaseController
{

    public $user;

    public function __construct(Guard $guard, User $user)
    {
        $this->middleware(function ($request, $next) {
            $this->user = Auth::user();
            return $next($request);
        });
        //$this->userID = Auth::user()?Auth::user()->id:null;

        dd($user);// Result attributes: []
        dd($guard);
        dd($this->user);

    }

}

DD() 之后的结果

dd($后卫); 这是 $guard 的结果

DD($this->user);

NULL

当我 dd 用户属性时,它将返回 Null。

4

1 回答 1

1

这是可以预料的。您必须在闭包内分配用户的middleware原因是会话中间件尚未运行。因此,直到执行过程的后期才会真正调用您上面的闭包。

如果您将dd($this->user)to 移到中间件闭包内或移到该控制器中的其中一个路由方法中,它应该可以正常工作。

另外,仅供参考,在您的中间件闭包中,您可以user从请求中获取实例,即$request->user()会给您经过身份验证的用户。

希望这有帮助!

于 2016-10-26T07:23:32.630 回答