Injecter le même service avec des alias différents dans Symfony
<p>Je ne sais pas si ce que vous demandez est exact, alors laissez-moi vous expliquer<br /><br />J'utilise foselasticabundance avec cette configuration :</p><p>< ;br />
<pre class="brush:php;toolbar:false;"># Lire la documentation : https://github.com/FriendsOfSymfony/FOSElasticaBundle/blob/master/doc/setup.md
fos_elastica :
clients :
par défaut : { url : '%env(ELASTICSEARCH_URL)%' }
index :
des articles:
nom_index : 'articles'
persistance:
# le pilote peut être orm, mongodb ou phpcr
pilote:orm
modèle : AppEntitySiteFArticleFArticleProp
fournisseur : ~
chercheur : ~</pre>
<p>Pour<span style="white-space:normal;">de cette façon</span>interroger l'index de mon article :</p>
<pre class="brush:php;toolbar:false;"><?php
espace de noms AppService ;
utilisez FOSElasticaBundleFinderTransformedFinder ;
classe FArticleService
{
fonction publique __construct(
privé en lecture seule TransformedFinder $finder,
)
{
}
requête de fonction publique (tableau $query, int $page, int $size)
{
$results = $this->finder->createRawPaginatorAdapter($query)->getResults(($page * $size) - $size, $size);
}
}≪/pré>
<p>但是有个错:</p>
<pre class="brush:php;toolbar:false;">Dans DefinitionErrorExceptionPass.php ligne 51 :
Impossible de câbler automatiquement le service « AppServiceFArticleService » : l'argument « $finder » de la méthode « __construct() » fait référence à la classe « FOSElasticaBundleFinderTransformedFinder », mais aucun service de ce type n'existe. Vous devriez peut-être attribuer un alias à cette classe au service "fos_elastica.finder.articles" existant.</pre>
<p>我改了一下</p>
<pre class="brush:php;toolbar:false;"># api/config/services.yaml
prestations de service:
#...
FOSElasticaBundleFinderTransformedFinder :
Alias : fos_elastica.finder.articles
public : true</pre>
<p>这样还挺好<br /><br /> ;</p>
<pre class="lang-yaml Prettyprint-override"><code># Lire la documentation : https://github.com/FriendsOfSymfony/FOSElasticaBundle/blob/master/doc/setup.md
fos_elastica :
clients :
par défaut : { url : '%env(ELASTICSEARCH_URL)%' }
index :
des articles:
nom_index : 'articles'
persistance:
# le pilote peut être orm, mongodb ou phpcr
pilote : orm
modèle : AppEntitySiteFArticleFArticleProp
fournisseur : ~
chercheur : ~
fdocentetes :
nom_index : 'fdocentetes'
persistance:
# le pilote peut être orm, mongodb ou phpcr
pilote : orm
modèle : AppEntitySageFDocentete
fournisseur : ~
chercheur : ~
</code></pre>
<p>文章,所以如果我创建另一个服务fdocteteservice:</p>
<pre class="lang-php Prettyprint-override"><code><?php
espace de noms AppService ;
utilisez FOSElasticaBundleFinderTransformedFinder ;
classe FDocenteteService
{
fonction publique __construct(
privé en lecture seule TransformedFinder $finder,
)
{
}
requête de fonction publique (tableau $query, int $page, int $size)
{
// ceci interrogera les articles de l'index pendant que je souhaite interroger l'index 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 alias pour "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)</pre>
<p><br /></p>