2017-02-24 3 views
0

엔티티 관리자를 사용할 수있는 심포니 양식 유형을 만들었습니다. http://symfony.com/doc/current/form/form_dependencies.html#define-your-form-as-a-service확장 된 양식 유형을 상위 인수를 전달하는 서비스로 다시 선언하지 마십시오.

가 지금은 첫 번째 연장 또 다른 형태의 유형을 만들려면 : 심포니 문서에 언급 된

그래서 나는 서비스로 선언했다. 하지만 이미 서비스로 선언 된 첫 번째 양식에서 확장하는 경우에도이 새로운 양식 형식을 서비스로 선언해야하는 것처럼 보입니다.

symfony가 새로운 폼이 첫 번째 폼 타입을 확장하고 자동으로 부모 클래스의 의존성을 주입하는 것을 감지 할 수 있습니까?

// src/AppBundle/Form/TaskType.php 

use Doctrine\ORM\EntityManager; 

class TaskType extends AbstractType 
{ 
    private $em; 

    public function __construct(EntityManager $em) 
    { 
     $this->em = $em; 
    } 

    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     // ... 
    } 

    // ... 
} 
// src/AppBundle/Form/TaskObject1Type.php 

use Doctrine\ORM\EntityManager; 

class TaskObject1Type extends TaskType 
{ 

    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     parent::buildForm($builder, $options); 

     // ... 
    } 

    // ... 
} 
+0

짧은 대답은 아니오입니다. 양식 구성 요소는 양식 유형 클래스 이름을 사용하여 컨테이너에서 서비스를 가져옵니다. 나는 당신이 그 코드를 찾고 그것을 수정할 수 있는지 알아보기를 원하지만, 몇 줄의 서비스 정의를 추가하는 것을 피하기 위해 많은 일이 될 것이라고 생각한다. 상위 서비스 기능이 도움이 될 수 있습니다. http://symfony.com/doc/current/service_container/parent_services.html – Cerad

답변

0

당신은 클래스를 확장하여 심포니에서 양식 유형을 확장해서는 안된다. 대신 getParent 메서드를 사용하여 상위 유형을 가리켜 야합니다.

그래서,

class ChildType extends AbstractType 
{ 
    ... 
    public function getParent() 
    { 
     return ParentType::class; 
    } 
} 

그래서 당신이 부모 클래스 종속성을 처리 할 필요가 대신

class ChildType extends ParentType 
{ 
    ... 
} 

사용.

+0

부모 빌드 양식을 호출해야하므로 예상대로 작동하지 않습니다 (수정 된 게시물 참조). 'extends ParentType'과'getParent()'메소드를 모두 추가하려고했지만'너무 적은 인수 '예외가 있습니다. – Seb33300