私は、プロジェクトの個々のモデルコントローラによって拡張された抽象コントローラクラスを使用しています。Laravelコントローラでモデルを動的に指定する
現在、各モデルコントローラは、モデルのクラスをコンストラクタに設定します。これは、アブストラクトが適切なオブジェクトをロードするために使用します。
だから、簡単な例を取るために、私の抽象は
public function show($id){
$object = $this->model::findOrFail($id);
$this->authorize('view', $object);
return view($this->view_dir.'.show',$object);
}
を持っており、私のReferee
クラスが
public function __construct(){
$this->middleware('auth');
$this->model = 'App\Referee';
$this->view_dir = 'referees'
}
これが正常に動作しているが、私は希望を含みコンストラクタで、それを拡張コントローラー・メソッド内の各アクションを手動で許可するのではなく、許可ミドルウェアを使用するように切り替えます。
私はそれを理解するために、show
メソッドをモデルでタイプヒントする必要がありますが、これは抽象のプロパティとしてのみ利用できます(動的タイプヒントを持つことはできません) 。
モデルをコントローラにバインドする別の方法はありますか?私は理想的には、子クラスのコンストラクタであると考えます。コントローラメソッドでモデルをTypehinting
私はこれをすべて理解していますが、モデル上でauthorizeメソッドを呼び出すのではなく、コントローラメソッドのミドルウェアで承認を実装したいと言っています(https: //laravel.com/docs/5.5/authorization#via-middleware)。 私はこれを実現する従来の方法として説明している方法を理解していますが、私の 'show'メソッドは抽象クラスです。すべてのモデルで呼び出されるので、明示的に型を宣言できませんあなたの例では '$ book'です。 '$ book'はどのクラスが要約を拡張しているかによって異なる必要があります。 – rhoward
継承を使用してコントローラコンストラクタでauthorizeを使用する – Lloople