2017-11-27 18 views
0

나는이 방법으로 컨트롤러 내에서 호출 여러 가지 서비스를 제공하는 프로젝트를하고 있어요 :

$service = $this->get('myservice'); 

하지만 난이 다른 방법으로 'MYSERVICE'를 부를 수있는 것으로 나타났습니다 : 물론

$service = $this->container->get('myservice'); 

서비스 서비스 선언의 DI 예 활용이 호출 사이에 어떤 차이가

myservice: 
     public: true 
     class: path/to/service 
     arguments: 
      - '@someEntityRepository' 

someEntityRepository: 
     class: Doctrine\ORM\EntityRepository 
     factory: ['@doctrine.orm.entity_manager', getRepository] 
     arguments: [path\to\Entity\someEntity] 

있습니까? 그렇다면 어떤 것을 사용해야합니까? 왜?

+0

처음 시작한 것으로 보인 이후 [action injection] (https://symfony.com/doc/current/controller.html#fetching-services-as-controller-arguments)을 사용해보십시오. S3.3 +가 필요합니다. 전체 질문을 부적합하게 만듭니다. – Cerad

+0

불행히도 저는 심포니 2.8에있는 프로젝트에서 작업하고 있습니다. (내가 원하지만) 그것을 업그레이드 할 수 없습니다. – MatiRC

답변

2

차이가 없습니다. symfony의 Controller 클래스를 확장하면 $this->get()을 사용하십시오. 타입이 짧습니다.

$this->get('myservice');$this->container->get('myservice');의 지름길입니다. 컨트롤러 기본 클래스 (Symfony\Bundle\FrameworkBundle\Controller)에서 사용할 수 있습니다.

0

Petter가 $ this- get와 $ this-> container-> get() 사이의 차이점에 대해 옳았으므로 차이가 없습니다. 그러나 컨트롤러를 서비스로 정의하고 종속성 주입을 통해 서비스를 주입하는 경우 좋은 코드를 작성합니다. 더 많은 유연성과 성능을 제공합니다.

+0

현재 symfony 2.8의 프로젝트에서 일하고 있습니다. (https : // symfony .com/doc/2.8/controller/service.html)에서는 권장하지 않습니다. 하지만 당신은 최신 버전에 맞습니다. – MatiRC