2016-06-01 9 views
0

LaravelのPHPの職人のルートで認証::ユーザー()オブジェクトを設定するためのより良い方法は何です:私たちは認証::コントローラのコンストラクタでは、ユーザ()はLaravelコントローラのコンストラクタ

ときのインスタンスを作成するとき、リストが例外をスローします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 

ユーザーオブジェクトを格納するための良い方法は何ですか?あなたは、アクションメソッドでそれを行う、コンストラクタでユーザーオブジェクトにアクセスするべきではありませんjedrzej.kurylo @

リファレンス

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

どのようにですか?

+1

がファサードを使用していけない、認証契約 '(名前空間の\のAuth $ AUTH)' '、その後の$ this - >ユーザー= $認証を注入;' –

答えて

1

あなたは間違いなく行うことができます。どのユーザーが認証されていない場合は

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

あなたはnullに等しい$this->userを持つことになります。

あなたのビューファイルでは、あなたが簡単に確認できます。

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

を、あなたが取得しているエラーは、再宣言Authenticatable

がためにあなたのUserモデルとコントローラをチェックしようとしているいくつかのuseステートメントに関連しているようですこの行のduplcation:

use Illuminate\Contracts\Auth\Authenticatable as Authenticatable 
+0

しかし、$ this-> user = Auth :: user()をコンストラクタで削除しても、 関数内でAuth :: user()と呼ばれています。これはphp artisanルートでうまく動作します:リスト –

+0

これはコンストラクタでも動作します。私はちょうどそれを試して、私のアプリケーションでそれは働いた。だから私が言っていることは(あなたが得ているエラーメッセージに基づいて)。問題はどこか他の場所です。 – scrubmx

+0

私は新しいプロジェクトを作成し、それはコンストラクタ上で動作します。あなたの答えをありがとう、私は問題を把握しようとします。 =] –

関連する問題