Suntikan perkhidmatan yang sama dengan alias berbeza dalam Symfony
P粉662802882
2023-08-07 21:55:08
<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>
Ini adalah penyelesaian saya daripada projek sedia ada.
Mesti ada kaedah lain.
Tidak mungkin untuk menyuntik objek yang sama dua kali melalui panggilan automatik. Oleh itu, ContainerInterface disuntik.
Maka anda perlu mengklonkan perkhidmatan ini. Saya tidak ingat dengan jelas, sudah lama sehingga saya terlupa