1

ユーザーがログアウトし、ユーザーがこのページにアクセスしたと仮定しますhttp://domain.com/admin

コントローラーには、次の __constructようなメソッドがあります。

public function __construct() {
  $this->middleware('auth');
  dd("Hello World");
}

画面に「Hello World」と表示されるのはなぜですか? $this->middlewareユーザーがログインしていないため、最初に実行し、認証ミドルウェアを介してログイン ページにリダイレクトする必要があります。

ただし、次のように削除する dd("Hello World");と:

public function __construct() {
  $this->middleware('auth');
}

正常に動作し、ログイン ページにリダイレクトされます。

4

1 に答える 1

2

$this->middlewareメソッドは実際にコントローラーのメソッド/アクションを、auth定義しているミドルウェアにバインドするためです。ルートが呼び出されたときの代わりに、この時点では実行されません。

参照: Laravel ドキュメント

コントローラーのコンストラクター内でミドルウェアを指定する方が便利です。コントローラーのコンストラクターからミドルウェア メソッドを使用すると、ミドルウェアをコントローラーの アクションに簡単に割り当てることができます。

そして、このルートをたどっている間: http://domain.com/admin. 実際にはindex、コントローラー オブジェクトがインスタンス化されてミドルウェアがバインドされた後に、コントローラーのメソッドが起動します。

于 2016-08-07T18:38:13.090 に答える