検索

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

Symfony に異なるエイリアスを使用して同じサービスを注入する

<p>質問している内容が正確かどうかわかりませんので、説明させていただきます<br /><br />私は次の構成で foselasticabundance を使用しています:</p><p>< ;br />; </p> <pre class="brush:php;toolbar:false;"># ドキュメントを読む: https://github.com/FriendsOfSymfony/FOSElasticaBundle/blob/master/doc/setup.md fos_elastica: クライアント: デフォルト: { URL: '%env(ELASTICSEARCH_URL)%' } インデックス: 記事: インデックス名: '記事' 永続性: # ドライバーは orm、mongodb、または phpcr のいずれかです ドライバー:orm モデル: AppEntitySiteFArticleFArticleProp プロバイダー: ~ ファインダー: ~</pre> <p><span style="white-space:normal;">この方法で</span>記事インデックスをクエリするには:</p> <pre class="brush:php;toolbar:false;"><?php 名前空間 AppService; FOSElasticaBundleFinderTransformedFinder を使用します。 クラス FArticleService { パブリック関数 __construct( プライベート読み取り専用 TransformedFinder $finder, ) { } public function query(array $query, int $page, int $size) { $results = $this->finder->createRawPaginatorAdapter($query)->getResults(($page * $size) - $size, $size); } }</pre> <p>しかし、間違いがあります: </p> <pre class="brush:php;toolbar:false;">DefinitionErrorExceptionPass.php の 51 行目: サービス「AppServiceFArticleService」を自動接続できません: メソッド「__construct()」の引数「$finder」はクラス「FOSElasticaBundleFinderTransformedFinder」を参照していますが、そのようなサービスは存在しません。このクラスを既存の「fos_elastica.finder.articles」サービスにエイリアスする必要があるかもしれません。< /pre> <p>変更しました</p> <pre class="brush:php;toolbar:false;"># api/config/services.yaml サービス: #... FOSElasticaBundleFinderTransformedFinder: エイリアス: fos_elastica.finder.articles public: true</pre> <p>これは問題ありません<br /><br />しかしここで、2 番目のインジケーター 0 パーセントを追加したいと思います</p><p><code></code> ;</ p> <pre class="lang-yaml prettyprint-override"><code># ドキュメントを読む: https://github.com/FriendsOfSymfony/FOSElasticaBundle/blob/master/doc/setup.md fos_elastica: クライアント: デフォルト: { URL: '%env(ELASTICSEARCH_URL)%' } インデックス: 記事: インデックス名: '記事' 永続性: # ドライバーは orm、mongodb、または phpcr のいずれかです ドライバー:orm モデル: AppEntitySiteFArticleFArticleProp プロバイダー: ~ ファインダー: ~ フドセンテス: インデックス名: 'fdocentes' 永続性: # ドライバーは orm、mongodb、または phpcr のいずれかです ドライバー:orm モデル:AppEntitySageFDocentete プロバイダー: ~ ファインダー: ~ </code></pre> <p>しかし、transformmedfinder には fos_elastica.finder というエイリアスがあるため、fdocenttetes インデックスをクエリする方法がわかりません。文章、所以如果我创建另一服务fdocteteservice:</p> <pre class="lang-php prettyprint-override"><code><?php 名前空間 AppService; FOSElasticaBundleFinderTransformedFinder を使用します。 クラス FDocenteteService { パブリック関数 __construct( プライベート読み取り専用 TransformedFinder $finder, ) { } public function query(array $query, int $page, int $size) { // これはインデックス記事に対してクエリを実行しますが、私はインデックス fdocentetes に対してクエリを実行したいと考えています $results = $this->finder->createRawPaginatorAdapter($query)->getResults(($page * $size) - $size, $size); } } </code></pre> <p>那现在咋办</p> <pre class="brush:php;toolbar:false;">$ php bin/console debug:container | grep fos_elastica.finder FOSElasticaBundleFinderTransformedFinder の「fos_elastica.finder.articles」のエイリアス fos_elastica.finder FOSElasticaBundleFinderTransformedFinder fos_elastica.finder.articles FOSElasticaBundleFinderTransformedFinder fos_elastica.finder.fdocentetes FOSElasticaBundleFinderTransformedFinder</pre> <pre class="brush:php;toolbar:false;">$ php bin/console debug:autowiring | grep fos_elastica.finder FOSElasticaBundleFinderTransformedFinder (fos_elastica.finder.articles) <p><br /></p>
P粉662802882P粉662802882484日前360

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

  • P粉777458787

    P粉7774587872023-08-08 18:16:46

    これは既存のプロジェクトからの私のソリューションです。

    リーリー リーリー

    他の方法があるはずです。

    自動呼び出しを通じて同じオブジェクトを 2 回挿入することはできません。したがって、ContainerInterface が挿入されます。

    次に、これらのサービスのクローンを作成する必要があります。はっきりと思い出せません、あまりに昔のことなので忘れてしまいました


    返事
    0
  • キャンセル返事