2011-11-16 4 views
4

엔티티를 지속하기 전에 일부 데이터를 내 DB의 다른 테이블에 복사하고 포맷해야합니다. 이 작업을 서비스로 수행하기를 원합니다. 그래서 나는이 서비스를 호출 할 수있는 가장 좋은 방법을 궁금 Symfony2의 의존성 주입 모범 사례

services: 
my_service: 
    class: Acme\Bundle\AcmeBundle\DependencyInjections\MyService 
    arguments: 
     entityManager: "@doctrine.orm.entity_manager" 

config.yml

의 서비스를 설명합니다. 내가 알아낼 수있는 유일한 방법은 컨트롤러에서입니다 :

$entity = new Entity($this->get('my_service')); 

계속 진행하는 가장 좋은 방법이 있습니까?

답변

7

내 이해가 잘된다면 서비스 my_service는 엔티티를 지속하기 전에 수행하고 싶은 작업입니다. 그것은 prePersist 이벤트에 의해 촉발 되어야만하는 서비스입니다.

그래서 저는이 서비스를 독트린 청취자로 변형 시켰을 것입니다.

services: 
    my_service: 
     class: Acme\Bundle\AcmeBundle\DependencyInjections\MyService 
     arguments: 
      entityManager: "@doctrine.orm.entity_manager" 
     tags: 
      - { name: doctrine.event_listener, event: prePersist } 

MyService 클래스에서는 원하는 모든 작업을 미리 prePersist 메서드로 정의해야합니다. LifecycleEventArgs는 엔티티 관리자를 얻을 수있는 방법을 제공하기 때문에

use Doctrine\ORM\Event\LifecycleEventArgs; 

class MyService 
{ 
    public function prePersist(LifecycleEventArgs $args) 
    { 
     $entity = $args->getEntity(); 
     $entityManager = $args->getEntityManager(); 
     (...) 
    } 
} 

당신은 당신의 서비스의 인수를 제거 할 수 있습니다.

마지막으로, 당신은

services: 
    my_service: 
     class: Acme\Bundle\AcmeBundle\DependencyInjections\MyService 
     tags: 
      - { name: doctrine.event_listener, event: prePersist } 

나는이 질문이 완벽하게 질문에 대한 대답

+0

대답 희망이 청취자에게있다! 고마워요. –

+0

질문에 답하면 정확한 답으로 표시해야합니다! –