Suntikan perkhidmatan yang sama dengan alias berbeza dalam Symfony
<p>Saya tidak pasti sama ada perkara yang anda tanya itu tepat, jadi izinkan saya menerangkan<br /><br />Saya menggunakan foselasticabundance dengan konfigurasi ini:</p><p>< ;br /> </p>
<pre class="brush:php;toolbar:false;"># Baca dokumentasi: https://github.com/FriendsOfSymfony/FOSElasticaBundle/blob/master/doc/setup.md
fos_elastica:
pelanggan:
lalai: { url: '%env(ELASTICSEARCH_URL)%' }
indeks:
artikel:
nama_indeks: 'artikel'
kegigihan:
# pemandu boleh menjadi orm, mongodb atau phpcr
pemandu:orm
model: AppEntitySiteFArticleFArticleProp
pembekal: ~
pencari: ~</pre>
<p>Untuk<span style="white-space:normal;">dengan cara ini</span>pertanyakan indeks artikel saya:</p>
<pre class="brush:php;toolbar:false;"><?php
ruang nama AppService;
gunakan FOSElasticaBundleFinderTransformedFinder;
kelas FArticleService
{
fungsi awam __build(
peribadi baca sahaja TransformedFinder $finder,
)
{
}
pertanyaan fungsi awam(array $query, int $page, int $size)
{
$results = $this->finder->createRawPaginatorAdapter($query)->getResults(($page * $size) - $size, $size);
}
}</pra>
<p>但是有个错:</p>
<pre class="brush:php;toolbar:false;">Dalam DefinitionErrorExceptionPass.php baris 51:
Tidak boleh autowire perkhidmatan "AppServiceFArticleService": argumen "$finder" kaedah "__construct()" merujuk kelas "FOSElasticaBundleFinderTransformedFinder" tetapi tiada perkhidmatan sedemikian wujud. Anda mungkin boleh menyamakan kelas ini kepada perkhidmatan "fos_elastica.finder.articles" sedia ada.</pre>
<p>我改了一下</p>
<pre class="brush:php;toolbar:false;"># api/config/services.yaml
perkhidmatan:
#...
FOSElasticaBundleFinderTransformedFinder:
alias: fos_elastica.finder.articles
awam: benar</pre>
<p>这样还挺好<br /><br />但现在我要增加第二个指标,0百分</p></p>< ;</p>
<pre class="lang-yaml prettyprint-override"><code># Baca dokumentasi: https://github.com/FriendsOfSymfony/FOSElasticaBundle/blob/master/doc/setup.md
fos_elastica:
pelanggan:
lalai: { url: '%env(ELASTICSEARCH_URL)%' }
indeks:
artikel:
nama_indeks: 'artikel'
kegigihan:
# pemandu boleh menjadi orm, mongodb atau phpcr
pemandu: orm
model: AppEntitySiteFArticleFArticleProp
pembekal: ~
pencari: ~
fdocentes:
nama_indeks: 'fdocentes'
kegigihan:
# pemandu boleh menjadi orm, mongodb atau phpcr
pemandu: orm
model: AppEntitySageFDocentete
pembekal: ~
pencari: ~
</code></pre>
<p>但现在我不知道如何查询fdocenttetes索引作为transformmedfinder有别名fos_elastica.finder。文章,所以如果我创建另一个服务fdocteteservice:</p>
<pre class="lang-php prettyprint-override"><code><?php
ruang nama AppService;
gunakan FOSElasticaBundleFinderTransformedFinder;
kelas FDocenteteService
{
fungsi awam __build(
peribadi baca sahaja TransformedFinder $finder,
)
{
}
pertanyaan fungsi awam(array $query, int $page, int $size)
{
// ini akan membuat pertanyaan pada artikel indeks sementara saya ingin bertanya pada indeks fdocentes
$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 alias untuk "fos_elastica.finder.articles"
fos_elastica.finder FOSElasticaBundleFinderTransformedFinder
fos_elastica.finder.articles FOSElasticaBundleFinderTransformedFinder
fos_elastica.finder.fdocentes FOSElasticaBundleFinderTransformedFinder</pre>
<pre class="brush:php;toolbar:false;">$ php bin/console debug:autowiring | grep fos_elastica.finder
FOSElasticaBundleFinderTransformedFinder (fos_elastica.finder.articles)</pre>
<p><br /></p>