前提・実現したいこと
Template Methodパターンを用いて、処理の共通化を行いつつControllerを作成しようとしています。
Controllerのメソッドをオーバーライドする際、メソッドの引数に親子関係にある子クラスのRequestクラスを引数にしていますが、該当ページにアクセスすると、以下のエラーが発生します。
発生している問題・エラーメッセージ
Declaration of App\Http\Controllers\SampleController::index(App\Http\Controllers\SampleRequest $request) should be compatible with App\Http\Controllers\ParentController::index(Illuminate\Http\Request $request)
親子関係にあるため、メソッドの引数に指定しているSampleRequestは問題ないと考えていますが、なぜエラーになるのかどうしても理屈がわからず、質問させていただきました。
該当のソースコード
- SampleController.php
php
1<?php 2 3namespace App\Http\Controllers; 4 5use App\Http\Controllers\Controller; 6use Illuminate\Http\Request; 7 8abstract class ParentController extends Controller 9{ 10 public function index(Request $request) 11 { 12 return view('index'); 13 } 14} 15 16class SampleRequest extends Request 17{ 18} 19 20class SampleController extends ParentController 21{ 22 public function index(SampleRequest $request) 23 { 24 return parent::index($request); 25 } 26} 27
- web.php
php
1Route::get('sample', 'SampleController@index'); 2
- 確認用URL
試したこと
SampleControllerのindexのメソッド名をindexExに変更し、indexExメソッド内で親クラスのメソッドの実行は問題なく行えることは確認しました。
- SampleController.php
php
1<?php 2 3namespace App\Http\Controllers; 4 5use App\Http\Controllers\Controller; 6use Illuminate\Http\Request; 7 8abstract class ParentController extends Controller 9{ 10 public function index(Request $request) 11 { 12 return view('index'); 13 } 14} 15 16class SampleRequest extends Request 17{ 18} 19 20class SampleController extends ParentController 21{ 22 public function indexEx(SampleRequest $request) 23 { 24 return parent::index($request); 25 } 26}
- web.php
php
1Route::get('sample', 'SampleController@indexEx');
補足情報(FW/ツールのバージョンなど)
- Laravel Framework 6.18.13
回答1件
あなたの回答
tips
プレビュー