Laravel PHP が異なるパラメータでオーバーライドされたメソッド
P粉863295057
P粉863295057 2024-01-16 17:22:48
0
1
452

この質問がこれまでに何度か質問されており、Laravel/PHP では単純に不可能な場合は申し訳ありません。

私の Laravel アプリケーションには、Laravel の豊富な命名規則を使用する PostController があります。また、主に PostController をさまざまな方法でコピーする CommentController もあるので、CommentControllerPostController.

を拡張する必要があると判断しました。

これまでの唯一の違いは、store() メソッドは異なる検証ルールを持つため、異なる FormRequest オブジェクトを受け入れる必要があることです。したがって、PostFormRequest ではなく CommentFormRequest を想定するように store() メソッドをオーバーライドしました (どちらも FormRequest を拡張します)。

これにより、オーバーライドされたメソッドのパラメータが基本メソッドと一致する必要があるというエラーが発生します。

これは予想通りですか?私がやりたいことに対する合理的な解決策はありますか?

ここから編集

私は、ユーザーが投稿、質問、アンケート、広告などを作成し、それらのいずれかにコメントできるこのプロジェクトの設計を開始したところです。

これらはすべて Post タイプです。他のモデルとの関係を持つものもあります。たとえば、PollPredependentAnswer モデルとの関係がある一方で、汎用の Post は関係がない場合があります。

一部の場合は、異なる検証ロジックが必要になる場合があります。たとえば、ユーザーは一般的な Post ではコメントを許可するかどうかを決定できますが、Advert ではコメントを許可しない場合があります。

私のデータベースでは、これらはすべて post テーブルに保存できると思いますが、postable_type は異なります。

私のコントローラーでは、CRUD ロジックのほとんどはこれらの異なるタイプ間で同じであると思います。場合によっては、差異が存在し、メソッドをオーバーライドする必要がある場合があります。

したがって、私の PostController には現在、非常に単純な store() メソッドがあります。 リーリー

私の

AdvertController には同じロジックがあり、異なる検証ルールがあるとします。 ああああ

P粉863295057
P粉863295057

全員に返信(1)
P粉807471604

特定の実装を暗示する代わりに、インターフェイスを暗示することで、より多くの利点が得られます。例:

リーリー

これであなたは:

  • 同じメソッド本体をわずかに異なるパラメーター ヒントで再定義する必要はありません。
  • Parent::store($request) は、型/健全性チェックなどの特別な処理が必要な状況で呼び出すことができますが、メソッドの残りの部分は同じままです。
  • 多数のアプリケーション クラスによってその系譜をたどる必要がある「神」クラスを定義するという落とし穴を回避できます。期待されるインターフェイスを実装するだけで、スタンドアロンのドロップイン置換を定義できます。
ここで参照されている他のクラス [例:

ControllerInterfaceRedirectInterface など] をさらに接続して、コードをさらに簡素化することができます。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート