suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Fügen Sie denselben Dienst mit unterschiedlichen Aliasnamen in Symfony ein

<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粉662802882P粉662802882483 Tage vor356

Antworte allen(1)Ich werde antworten

  • P粉777458787

    P粉7774587872023-08-08 18:16:46

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

    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。

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


    Antwort
    0
  • StornierenAntwort