この質問がこれまでに何度か質問されており、Laravel/PHP では単純に不可能な場合は申し訳ありません。
私の Laravel アプリケーションには、Laravel の豊富な命名規則を使用する PostController
があります。また、主に PostController
をさまざまな方法でコピーする CommentController
もあるので、CommentController
は PostController代码>.
これまでの唯一の違いは、store()
メソッドは異なる検証ルールを持つため、異なる FormRequest
オブジェクトを受け入れる必要があることです。したがって、PostFormRequest
ではなく CommentFormRequest
を想定するように store()
メソッドをオーバーライドしました (どちらも FormRequest
を拡張します)。
これにより、オーバーライドされたメソッドのパラメータが基本メソッドと一致する必要があるというエラーが発生します。
これは予想通りですか?私がやりたいことに対する合理的な解決策はありますか?
ここから編集
私は、ユーザーが投稿、質問、アンケート、広告などを作成し、それらのいずれかにコメントできるこのプロジェクトの設計を開始したところです。
これらはすべて Post
タイプです。他のモデルとの関係を持つものもあります。たとえば、Poll
は PredependentAnswer
モデルとの関係がある一方で、汎用の Post
は関係がない場合があります。
一部の場合は、異なる検証ロジックが必要になる場合があります。たとえば、ユーザーは一般的な Post
ではコメントを許可するかどうかを決定できますが、Advert
ではコメントを許可しない場合があります。
私のデータベースでは、これらはすべて post
テーブルに保存できると思いますが、postable_type
は異なります。
私のコントローラーでは、CRUD ロジックのほとんどはこれらの異なるタイプ間で同じであると思います。場合によっては、差異が存在し、メソッドをオーバーライドする必要がある場合があります。
したがって、私の PostController
には現在、非常に単純な store()
メソッドがあります。
リーリー
AdvertController には同じロジックがあり、異なる検証ルールがあるとします。
ああああ
特定の実装を暗示する代わりに、インターフェイスを暗示することで、より多くの利点が得られます。例:
リーリーこれであなたは:
は、型/健全性チェックなどの特別な処理が必要な状況で呼び出すことができますが、メソッドの残りの部分は同じままです。
ControllerInterface
、
RedirectInterfaceなど] をさらに接続して、コードをさらに簡素化することができます。