Laravel の Policy で User 以外も使いたいときは第 2 引数を配列にして追加する

Oct 27th, 2023 laravel php

状況

Policy にユーザ以外の情報を渡したい.

問題

元々のコード

public function viewAny(User $user)
{
  //
}

こうしたい

public function viewAny(User $user, Hoge $hoge)
{
  //
}

Policy のコードを変更しただけでは,コントローラでうまくデータが渡らず Policy が適用されない.

User は自動で認証ユーザの値を取得するため引数に含める必要はないが,Hoge を入力する方法がよくわからない(ドキュメントには第 2 引数に入れろと書いてある).

// これはNG
$this->authorize('viewAny', Hoge::class);

// これもNG
$this->authorize('viewAny', $hoge);

// これもNG
$this->authorize('viewAny', $hoge, Hoge::class);

// これもNG
$this->authorize('viewAny', Hoge::class, $hoge);

解決策

こうする.

$this->authorize('viewAny', [Hoge::class, $hoge]);

まとめ

Policy に引数追加する場合は第 2 引数を配列にして追加する.

以上だ( `・ω・)b