在Laravel控制器的构造函数中设置Auth :: user()对象的更好方法是什么

时间:2016-06-01 15:28:41

标签: php laravel laravel-5 controller eloquent

Laravel的Php Artisan Route:当我们在控制器构造函数中实例化Auth :: user()时,列表将抛出异常

当你运行php artisan route:list时,Laravel实例化所有要检查的控制器,如果它们声明了一个中间件 - 它通常是通过调用middleware()方法在构造函数中完成的。此时,没有用户会话,因此Auth :: user()不会返回任何内容,我们将在尝试访问非对象上的name属性时收到错误。

示例:

     class settingController extends Controller
    {
        protected $user;

        public function __construct(ImageRepo $image)
        {
            $this->user =  Auth::user();
            $this->image = $image;
        }
......

异常

C:\laragon\www\water2>php artisan route:list -v


  [Symfony\Component\Debug\Exception\FatalErrorException]                                                     
  Cannot use Illuminate\Contracts\Auth\Authenticatable as Authenticatable because the name is already in use  

存储用户对象的更好方法是什么?

参考

I get the error in php artisan route:list command in laravel?

  

@ jedrzej.kurylo您不应该在构造函数中访问用户对象,请在操作方法中执行此操作。

但是怎么样?

1 个答案:

答案 0 :(得分:1)

你绝对可以这样做:

public function __construct()
{
    $this->user =  Auth::user();
}

如果没有用户通过身份验证,您的$this->user将等于null

在您的视图文件中,您只需检查:

@if($user)
   <h1>Hello, {{ $user->name }}</h1>
@endif

您收到的错误似乎与尝试重新声明use的某些Authenticatable声明有关

检查您的用户模型和控制器是否存在此行的重复:

use Illuminate\Contracts\Auth\Authenticatable as Authenticatable