Laravel5系で、controllerにmiddlewareを指定する方法をまとめた。
例としてauthミドルウェアを使う。
コントローラー全体への指定
コントローラー全体にミドルウェアを指定する場合、このようにコントローラーのコンストラクタに書く。
class UserController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
}
コントローラー一部への指定
onlyで指定したコントローラーメソッドにだけミドルウェアを設定できる。
自分の意思で追加するまでミドルウェアが設定されて欲しく無い場合や、見てわかりやすいなどといった利点がある。
class UserController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth')
->only(['create', 'store', 'edit', 'update', 'destroy']);
}
}
コントローラー一部だけ指定しない
exceptで指定したコントローラーメソッドにはミドルウェアが設定されない。
authなどの、場合によって非公開にしたい情報が漏れる可能性がある場合、指定漏れが無いように安全側に倒したい。
その場合、exceptを使った方が良い。
class UserController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth')
->except(['index', 'show']);
}
}
まとめ
- (指定なし): 全体を指定したい場合
- only: 一部を指定したい、且つ自分で明確に指定するまで設定されて欲しくないミドルウェアを使う場合
- except: 一部を指定したい、且つ指定漏れがあってはいけないミドルウェア(特にauth)を使う場合
以上の3パターンを場合分けも含めて紹介。