ホームページ  >  に質問  >  本文

Shopware 6、Symfony の抽象クラスと依存関係注入

現在、私は Symfony に基づいて Shopware 6 拡張機能を開発しています。理解できないのは、抽象クラスと依存関係の注入を実装する方法です。

したがって、コードをリファクタリングしてこれらのメソッドを頻繁に使用できるようにしたいのですが、別のコンテキスト (別のリポジトリを使用) で使用できるようにしたいと考えています。 リーリー

ご覧のとおり、コンストラクト (製品リポジトリ) 内に依存関係の注入があります。ここで私の質問は、抽象クラスを作成するにはどうすればよいですか、つまり、これらのメソッドを保存しますが、子クラスは必要なリポジトリで親構造を「オーバーライド」しますか?たとえば、

ProductRepositorygetDataId (現在は getExistingProductId と呼ばれていますが、リファクタリングされ、抽象クラスで名前が変更されます) メソッドを使用したいのですが、次のクラスでは使用したいと考えています。 カテゴリリポジトリでも同じ方法ですか?

Service.xml は依存関係インジェクターとも呼ばれます

リーリー

私は OOP を初めて使用します。良い例とコードの説明を提供してください。ありがとう!

P粉680087550P粉680087550306日前483

全員に返信(1)返信します

  • P粉248602298

    P粉2486022982024-01-10 00:03:24

    私の理解が正しければ、最初のパラメータのみを交換可能にし、例の 3 つのメソッドは抽象化で実装する必要があります。ここにアイデアがあります。

    ###まとめ:### リーリー

    コンストラクターでリポジトリを取得し、共通リポジトリに関するすべての共通メソッドを抽象化で実装します。各メソッドに (おそらく) 特定の条件を使用しているため、拡張クラスに

    getDataId

    メソッドを実装したいと考えています。したがって、抽象シグネチャを定義して拡張クラスに実装を強制するだけです。 あなたのサービスレベル:

    リーリー

    他の挿入されたサービスはこの特定のインスタンスでのみ使用されるため、拡張クラスではリポジトリを親コンストラクターに渡すだけです。

    getDataId

    を実装すると、特定の条件を作成し、その条件を使用して保護された (拡張機能でのみ使用できるため) searchId メソッドを呼び出すことができます。

    返事
    0
  • キャンセル返事