cari

Rumah  >  Soal Jawab  >  teks badan

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>
P粉662802882P粉662802882483 hari yang lalu357

membalas semua(1)saya akan balas

  • P粉777458787

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

    Ini adalah penyelesaian saya daripada projek sedia ada.

    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');
    }
    

    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


    balas
    0
  • Batalbalas