2012-04-19 4 views
1

가능한 경우 서비스 컨테이너에 대한 참조를 제거하여 스택 속도를 높이려고합니다. 이 경우에만 요청이 필요합니다.Symfony2 스코프 확장 알림 제거

email_error_message: 
    class: Core\MyBundle\Services\Email\ErrorMessage 
     arguments: [ @request, %params ] 

그러나 범위 확장 문제가 발생합니다. 지금 코드를 리팩터링하는 것에 관심이 없으며 strict = true를 추가하여 경고를 없애고 싶습니다. 하지만 YAML 구문을 올바르게 처리 할 수없는 것 같습니다.

email_error_message: 
    class: Core\MyBundle\Services\Email\ErrorMessage 
     arguments: 
      - { type: service, id: request, strict: false } 
      - %params% 

이것은 제대로 작동하지 않습니다. 어떤 아이디어?

수정 이 서비스의 범위를 요청으로 변경할 수는 있지만이 경우 옵션이 아닙니다.

답변

4

서비스의 범위를 request 범위로 제한하려면 Request 인스턴스 (예 : 하위 요청 내에서 서비스를 사용하는 경우)를 통과했는지 확인해야합니다. 주요 요청. 서비스 설정을 다음으로 조정하십시오.

services: 
    email_error_message: 
     class: Core\MyBundle\Services\Email\ErrorMessage 
     scope: request 
     arguments: [ @request, %params% ] 

자세한 내용은 the docs을 참조하십시오.

질문에 따라을 편집하면 범위를 변경할 수 없습니다. 이 경우, 같은해야 당신의 구문은 다음과 같습니다 : 첨부 = 기호

services: 
    email_error_message: 
     class: Core\MyBundle\Services\Email\ErrorMessage 
     arguments: [ @request=, %params% ] 

합니다. DI 컨테이너의 코드에서 파생 된 것입니다 .-)

+0

감사합니다. 읽었지만 불행히도이를 수행 할 수 없습니다. 범위를 바꾸고 싶지 않은 라인 아래로 많은 서비스에 영향을 미칠 것입니다 (이것을 반영하기 위해 제 질문을 업데이트 할 것입니다). – Mathew

+0

@MatW OK - 내 대답을 업데이트했습니다. – richsage

+0

'@ request ='구문은 Twig의'globals' 설정에서 작동하지 않습니다 ('ServiceNotFoundException'을 던집니다). Twig의 전역에 더 넓은 범위의 서비스를 주입하는 유일한 방법은'$ this-> controller-> get ('twig') -> addGlobal ('A', $ this-> controller-> get ('B')) ;'요청 리스너에서 처리되었습니다! – Wirone

관련 문제