2017-12-29 39 views
0

symfony 2.7에서 symfony 4.0으로 마이그레이션 중입니다. 성공에 따라 하나의 번들을 마이그레이션했습니다. 이제 두 번째 번들을 마이그레이션 중이며 오류 메시지가 표시됩니다. 나는 심포니 4.0이 나에게 원하는 것을 전혀 얻지 못한다.symfony4 autowire를 true로 마이그레이션 - 오류 메시지 받기

autowire: true을 켜면이 오류 메시지가 표시됩니다.

Cannot autowire service "App\Kernel": argument "$environment" of method "Symfony\Component\HttpKernel\Kernel::__construct()" must have a type-hint or be given a value explicitly. 

누군가 나를 도울 수 있습니까?

메시지를 끄면 아무 메시지도 나오지 않습니다.

업데이트

나는 그것이 의해 생성 아니에요 의미 만

App\Backend\AccountBundle\BackendAccountBundle::class => ['all' => true], 
+0

당신이 당신의 구성 파일을 붙여 넣을 수 있습니다 :

class MyService { public function __construct(OtherServce $service, string $someParameter) {} } # config/services.yaml services: _defaults: autowiring: true MyService: $someParameter: 'someValue' 

이 같은이 명시 적으로 기록이다? 현재 커널을 autowire하려고합니다. – user254319

+0

symfony4의 기본값. 하지만 업데이 트가 내 질문에 – craphunter

+1

나는 구성 파일에서 더 재미있다. 'config/services.yaml' 어디 autowiring에 대한 모든 것을 정의합니다. – user254319

답변

4

보통 커널은 소위 합성 서비스로 서비스 컨테이너에 추가됩니다 bundles.php 내 번들 등록 구성에서 DI 컨테이너. 대신 id가 설정되고 이전에 구성된 서비스가 컨테이너에 추가됩니다. 번들의 컨테이너가 새 커널을 여기에서 만들고 싶어한다는 것이 이상하게 보입니다. 그래서 나는 번들의 서비스에서 커널에 접근하려는 위치와 방법을 확인하고 실제로 커널을 전달할 것인지 아닌지 확인합니다. 만약 당신이 합성 서비스에 대한 서비스 컨테이너 문서를 확인하고 싶을 수도 있습니다.

오류 자체에 관해서는.

# config/services.yaml 
parameters: 
    environment: prod 
    debug: false 
: 하나의 매개 변수는 매개 변수의 이름과 일치하여 services.yaml에 정의 된 것으로 당신이 이러한 경우

public function __construct(string $environment, bool $debug) {...} 

: 당신이 커널과 같은 매개 변수가 필요 서비스가있을 때 심포니의 autowiring을 자주 평면 폭포

또는 해당 위치에 어떤 매개 변수를 지정할지 구성에 알려야합니다.

App\Kernel: 
    $environment: prod 
    $debug: false 

environmentdebug 이름 만이 개 인수는 사용자가 제공 한 값으로 덮어해야 autowiring을 말할 것이다, 그러나 나머지는 autowiring을 통해 이루어집니다. 이 방법을 사용하면 arguments: 부분을 건너 뛸 수 있으며 autowiring을 통해 올바르게 설정 한 모든 인수를 건너 뛸 수 있습니다.

예를 들어

이 같은 서비스가있는 경우 :

services: 
    MyService: 
     class: MyService 
     arguments: 
      - '@OtherServce' 
      - 'someValue' 
+0

고마워요! 아주 좋은 품질의 답변! – craphunter