2017-12-30 69 views
2

내 응용 프로그램을 symfony4로 마이그레이션하기 시작했으나 제 3 자 번들 중 하나에서 다음 비추천 통지가 있습니다. (tbbcmoneybundle. 내가이 코드Symfony4 마이그레이션 : "doctrine.database_create_command"서비스가 개인용입니다.

$this->runCommand($this->client,'doctrine:database:create'); 
    $this->runCommand($this->client,'doctrine:schema:update --force'); 
에 관한 추측 홍보 현재 빌드 때문에 이러한 오류의 실패

을 제안하기 위해 (전체 보고서 here)

The "doctrine.database_create_command" service is private, getting it from the container is deprecated since Symfony 3.2 and will fail in 4.0. You should either make the service public, or stop using the container directly and use dependency injection instead: 25x 
    12x in ConfigTest::setUp from Tbbc\MoneyBundle\Tests\Config 
    6x in ConsoleTest::setUp from Tbbc\MoneyBundle\Tests\Console 
    3x in ConsoleTest::testRunRatioList from Tbbc\MoneyBundle\Tests\Console 
    2x in ConsoleTest::testRunRatioFetch from Tbbc\MoneyBundle\Tests\Console 
    1x in ConfigTest::testHistoryOfFetchedRatio from Tbbc\MoneyBundle\Tests\Config 
    1x in ConsoleTest::testRunSaveRatio from Tbbc\MoneyBundle\Tests\Console 

에 변경

그러나이 문제를 해결하는 방법을 보지 못하고이 문제에 도움이되지 않습니다.

+0

@ gp_sflover 포인터에 감사드립니다. 그러나 내가 부족하다는 것을 발견했습니다. (그리고이 질문으로 채우고 싶습니다.) 그것을 고치는 방법에 대한 구체적인 예가있었습니다. –

+1

두 개의 PR이 이미 만들어졌으며 마지막으로 3 시간 전 [Symfony4 support bis] (https://github.com/TheBigBrainsCompany/TbbcMoneyBundle/pull/85) 게시했습니다. 그냥 기다리거나 거기에 도움을 줄 수있는 가능성을 제공하십시오 :-) –

+0

@gp_sflover 사실 저는 두 번째 MR을 만든 사람입니다. 나는 이것에 의해 막혔으므로 저는 PR이 죽는 것을 원하지 않습니다. PR을 끝까지 추진할만큼 충분한 동기를 찾지 못했습니다. 그리고 꽤 일반적인 도서관 (교리)에서이 사례를 확인하여 사람들이 자신을 홍보하거나 이주하는 데 5 ~ 10 분을 절약 할 수 있도록 도울 수 있기를 바랍니다. –

답변

1

Symfony 3.4에서 시작된 Symfony 4에서 컨테이너 인식이 손실 된 것 같습니다 (유효한 구문 인 경우). 이 블로그 talks about restricting container injection in 3.4 and how it will go away in 4.0.

누군가가 opened a PR to upgrade to Symfony 4, but that is failing 인 것처럼 보입니다. (당신도 함께 그걸 돕기 위해 노력하고있는 것 같습니다.) this Travis integration test that is failing에 따르면, "ContainerAwareCommand"를 확장하는 명령은 실패의 원인입니다.

에 따르면.

어떤 의미가 있습니다. ContainerAwareCommand는 위의 블로그 포스트에서 설명한대로 Symfony 4에 private으로 설정된 컨테이너를 주입하려고 시도합니다 (그리고 3.4 이후로 더 이상 사용되지 않습니다). 수정, 그리고 만약 당신이 제대로 귀하의 질문을 읽고, TBBC에 PR 에서이 문제를 해결하기 위해 명령 클래스에서 ContainerAwareCommand의 확장을 제거하고 그냥 필요한 서비스를 주입하는 것 같다. new Symfony 4 doc on commands을 참조하십시오. ContainerAware는 더 이상 it was in 2.8-ish과 같은 옵션이 아닙니다.

요약하면 ContainerAwareCommand의 확장 프로그램을 제거하고 해당 명령에서 사용하는 서비스를 주입하십시오. (아마도 do some extra configuration to ensure that the services are public 일 필요가 있습니다.)

+0

고맙습니다, 많이 시도해 보겠습니다 –

+1

번들의 코드를 자세히 조사한 후 hmmm은 엄격한 설정으로 비난 알림을 사용하여 테스트가 실행 된 것 같습니다 (지원 중단 알림이 있으면 테스트 실패) 하지만이 것들은 심포니 프레임 워크 자체에서 나온 것입니다. 왜냐하면 3.1을 사용했기 때문에 이러한 비추천 통지는 이후 버전에서만 내부적으로 수정되었습니다 .... –

+1

나는이 정확한 경우에 해당하는 것처럼 정확한 답을 생각할 것입니다. "대답",하지만 그것은 실제로 올바른 방향으로 나를 인도합니다 :) –