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>