Symfony에서 다른 별칭으로 동일한 서비스를 주입합니다.
P粉662802882
2023-08-07 21:55:08
<p>질문하시는 내용이 정확한지 잘 모르겠으니 설명하겠습니다<br /><br />저는 다음 구성으로 foselasticabundance를 사용합니다:</p><p>< ;br /> </p>
<pre class="brush:php;toolbar:false;"># 문서 읽기: https://github.com/FriendsOfSymfony/FOSElasticaBundle/blob/master/doc/setup.md
fos_elastica:
클라이언트:
기본값: { URL: '%env(ELASTICSEARCH_URL)%' }
인덱스:
조항:
index_name: '기사'
고집:
# 드라이버는 orm, mongodb 또는 phpcr일 수 있습니다.
드라이버:orm
모델: AppEntitySiteFArticleFArticleProp
제공자: ~
검색기: ~</pre>
<p><span style="white-space:normal;">이 방법으로</span>내 기사 색인을 쿼리하려면:</p>
<pre class="brush:php;toolbar:false;"><?php
네임스페이스 AppService;
FOSElasticaBundleFinderTransformedFinder를 사용하세요.
FArticleService 클래스
{
공개 함수 __construct(
개인 읽기 전용 TransformedFinder $finder,
)
{
}
공개 함수 쿼리(배열 $query, int $page, int $size)
{
$results = $this->finder->createRawPaginatorAdapter($query)->getResults(($page * $size) - $size, $size);
}
}</pre>
<p>但是有个错:</p>
<pre class="brush:php;toolbar:false;">DefinitionErrorExceptionPass.php 라인 51에서:
"AppServiceFArticleService" 서비스를 자동 연결할 수 없습니다. "__construct()" 메서드의 "$finder" 인수는 "FOSElasticaBundleFinderTransformedFinder" 클래스를 참조하지만 해당 서비스가 없습니다. 이 클래스의 별칭을 기존 "fos_elastica.finder.articles" 서비스에 지정해야 할 수도 있습니다.</pre>
<p>我改了一下</p>
<pre class="brush:php;toolbar:false;"># api/config/services.yaml
서비스:
#...
FOSElasticaBundleFinderTransformedFinder:
별칭: fos_elastica.finder.articles
공개: true</pre>
<p>这样还挺好<br /><br />但现에서 我要增加第二个指标,0百分</p><p><code></code> ;</p>
<pre class="lang-yaml Prettyprint-override"><code># 문서 읽기: https://github.com/FriendsOfSymfony/FOSElasticaBundle/blob/master/doc/setup.md
fos_elastica:
클라이언트:
기본값: { URL: '%env(ELASTICSEARCH_URL)%' }
인덱스:
조항:
index_name: '기사'
고집:
# 드라이버는 orm, mongodb 또는 phpcr일 수 있습니다.
드라이버 : orm
모델: AppEntitySiteFArticleFArticleProp
제공자: ~
검색기: ~
fdocentes:
index_name: 'fdocentetes'
고집:
# 드라이버는 orm, mongodb 또는 phpcr일 수 있습니다.
드라이버 : orm
모델: AppEntitySageFDocentete
제공자: ~
검색기: ~
<p>저는 fdocenttetes를 제작하는 데 있어 fos_elastica.finder라는 이름을 갖고 있지 않다는 것을 알고 있습니다.文章,所以如果我创建另一个服务fdocteteservice:</p>
<pre class="lang-php Prettyprint-override"><code><?php
네임스페이스 AppService;
FOSElasticaBundleFinderTransformedFinder를 사용하세요.
클래스 FDocenteteService
{
공개 함수 __construct(
개인 읽기 전용 TransformedFinder $finder,
)
{
}
공개 함수 쿼리(배열 $query, int $page, int $size)
{
// 인덱스 fdocentetes에 대해 쿼리하는 동안 인덱스 기사에 대해 쿼리합니다.
$results = $this->finder->createRawPaginatorAdapter($query)->getResults(($page * $size) - $size, $size);
}
}
<p>咋办</p>
<pre class="brush:php;toolbar:false;">$ php bin/console 디버그:컨테이너 | grep fos_elastica.finder
"fos_elastica.finder.articles"에 대한 FOSElasticaBundleFinderTransformedFinder 별칭
fos_elastica.finder FOSElasticaBundleFinderTransformedFinder
fos_elastica.finder.articles FOSElasticaBundleFinderTransformedFinder
fos_elastica.finder.fdocentetes FOSElasticaBundleFinderTransformedFinder</pre>
<pre class="brush:php;toolbar:false;">$ php bin/console 디버그:autowiring | grep fos_elastica.finder
FOSElasticaBundleFinderTransformedFinder(fos_elastica.finder.articles)</pre>
<p><br /></p>
이것은 기존 프로젝트의 솔루션입니다.
으아아아 으아아아다른 방법도 있을 거에요.
자동 호출을 통해 동일한 개체를 두 번 주입하는 것은 불가능합니다. 따라서 ContainerInterface가 주입됩니다.
그런 다음 이 서비스를 복제해야 합니다. 너무 오래되어서 기억이 잘 안나네요