Fügen Sie denselben Dienst mit unterschiedlichen Aliasnamen in Symfony ein
P粉662802882
P粉662802882 2023-08-07 21:55:08
0
1
355
<p>Ich bin mir nicht sicher, ob Ihre Frage richtig ist, also lassen Sie es mich erklären<br /><br />Ich verwende foselasticabundance mit dieser Konfiguration:</p><p>< ;br /> </p> <pre class="brush:php;toolbar:false;"># Lesen Sie die Dokumentation: https://github.com/FriendsOfSymfony/FOSElasticaBundle/blob/master/doc/setup.md fos_elastica: Kunden: Standard: { URL: '%env(ELASTICSEARCH_URL)%' } Indizes: Artikel: index_name: 'Artikel' Beharrlichkeit: # Der Treiber kann Orm, Mongodb oder PHPCr sein Treiber:orm Modell: AppEntitySiteFArticleFArticleProp Anbieter: ~ Finder: ~</pre> <p>So<span style="white-space:normal;">auf diese Weise</span>fragen Sie meinen Artikelindex ab:</p> <pre class="brush:php;toolbar:false;"><?php Namespace AppService; verwenden Sie FOSElasticaBundleFinderTransformedFinder; Klasse FArticleService { öffentliche Funktion __construct( privater schreibgeschützter TransformedFinder $finder, ) { } öffentliche Funktionsabfrage (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;">In DefinitionErrorExceptionPass.php Zeile 51: Der Dienst „AppServiceFArticleService“ kann nicht automatisch verknüpft werden: Das Argument „$finder“ der Methode „__construct()“ verweist auf die Klasse „FOSElasticaBundleFinderTransformedFinder“, aber ein solcher Dienst ist nicht vorhanden. Sie sollten diese Klasse möglicherweise mit einem Alias ​​für den vorhandenen Dienst „fos_elastica.finder.articles“ versehen.</pre> <p>我改了一下</p> <pre class="brush:php;toolbar:false;"># api/config/services.yaml Dienstleistungen: #... FOSElasticaBundleFinderTransformedFinder: Alias: fos_elastica.finder.articles öffentlich: true</pre> <p>这样还挺好<br /><br />但现在我要增加第二个指标,0百分</p><p><code></code> ;</p> <pre class="lang-yaml Prettyprint-override"><code># Lesen Sie die Dokumentation: https://github.com/FriendsOfSymfony/FOSElasticaBundle/blob/master/doc/setup.md fos_elastica: Kunden: Standard: { URL: '%env(ELASTICSEARCH_URL)%' } Indizes: Artikel: index_name: 'Artikel' Beharrlichkeit: # Der Treiber kann Orm, Mongodb oder PHPCr sein Treiber: orm Modell: AppEntitySiteFArticleFArticleProp Anbieter: ~ Finder: ~ fdocentetes: Indexname: 'fdocentetes' Beharrlichkeit: # Der Treiber kann Orm, Mongodb oder PHPCr sein Treiber: orm Modell: AppEntitySageFDocentete Anbieter: ~ Finder: ~ </code></pre> <p>文章,所以如果我创建另一个服务fdocteteservice:</p> <pre class="lang-php Prettyprint-override"><code><?php Namespace AppService; verwenden Sie FOSElasticaBundleFinderTransformedFinder; Klasse FDocenteService { öffentliche Funktion __construct( privater schreibgeschützter TransformedFinder $finder, ) { } öffentliche Funktionsabfrage (Array $query, int $page, int $size) { // Dadurch werden die Indexartikel abgefragt, während ich den Index fdocentetes abfragen möchte $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 ​​für „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>
P粉662802882
P粉662802882

Antworte allen(1)
P粉777458787

这是我从现有项目的解决方案。

app.service.configuration_service_foo:
    public: true
    class: App\Service\ConfigurationService
    arguments:
      - '@app.config.foo_config'

app.service.configuration_service_bar:
    public: true
    class: App\Service\ConfigurationService
    arguments:
      - '@app.config.bar_config'
private ConfigurationService $configServiceFoo;
private ConfigurationService $configServiceBar;

public function __construct(
    ContainerInterface $container,
) {
    $this->configServiceFoo = clone $container->get('app.service.configuration_service_foo');
    $this->configServiceBar = clone $container->get('app.service.configuration_service_bar');
}

也应该还有别的方法。

不可能通过自动调用两次注入同一个对象。所以,注入了ContainerInterface。

然后你必须克隆这些服务。记不清了,太久了搞忘了


Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage