2012-12-13 3 views
1

세션 데이터를 양식으로 가져 오려고하는데 어떻게해야할지 모르겠습니다.symfony2의 formType에서 세션에 액세스하십시오.

내 FormType의 생성자로 전달할 수 있지만 실제로 세션을 사용하는 FormType은 인데 기본 폼에 내림차순 3 레벨이 더 깊게 중첩되어 있습니다 (). 그래서 나는이 같은 각 양식 유형의 각 생성자에서 세션 객체를 전달하는 더러운이라고 생각 :

->add('name', new NestedFormType($this->session)) 

가 나는 또한 서비스로 formsType를 사용하는 방법에 대한 생각했다. 그래서 나는 각 formsType을위한 부모를 세션에 주입해야한다.

하지만 내 모든 양식을 정의하지 않고 어떻게 할 수 있습니까?

더구나 나는 내 FormTypes 내부의 DIC에 액세스 할 수 없습니다. 따라서 DIC에 액세스 할 수있는 컨트롤러에서 생성 된 첫 번째 formType 객체를 만드는 것이 좋지만 중첩 된 FormTypes는 부모로부터 초기화 할 수 없습니다.

깨끗한 해결책이 있습니까?

답변

1

이 상위 형식을 서비스로 정의하고 세션을 인수로 전달해야합니다. 이 질문에

보기 :

NestedFormType 서비스 : 당신만큼 당신이 내부를 참조로 높은 수준의 양식 유형에 대한 서비스를 정의 할 필요가 없습니다 Create a form as a service in Symfony2

+0

나는 그것에 대해 생각해 보았지만 부모가 서비스이지만 자식 개체를 어떻게 만들어야합니까? – Leto

+0

나는 당신이 options 매개 변수로 생성자를 생성하고자하는 모든 데이터를 전달할 수 있다고 생각한다. :) –

+0

어쩌면, 내가 세션을 필요로하는 폼에 도달 할 때까지 폼에서 폼으로 전달해야만한다. – Leto

0

는 그 별명에 의해 형태의 유형을 주입 정의 :

nested.form.type: 
    class: Type\NestedFormType 
    tags: 
     - { name: form.type, alias: nested_form } 
    arguments: [ @security.context ] 

NestedFormType :

class NestedFormType extends AbstractType 
{ 
    private $security_context; 

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

    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     // do something with $this->security_context 
    } 

    public function getName() 
    { 
     return 'nested_form'; 
    } 
} 
,

ParentFormType :

public function buildForm(FormBuilderInterface $builder, array $options) { 
    $builder->add('name', 'nested_form'); 
    // 'nested_form' matches service definition and NestedFormType::getName() 
}