2012-03-10 6 views
25

github의 Symfony2 저장소에있는 FormEvents 클래스입니다. 주요 기사 인 How to Dynamically Generate Forms Using Form Events과 연결되어 있습니다.Symfony2 양식 이벤트에 대한 설명?

누구나 이러한 이벤트가 흐름에서 정확하게 호출되면 어떻게됩니까? 양식 데이터에 대한 읽기 전용 액세스 -

DataEvent :

namespace Symfony\Component\Form; 

/** 
* @author Bernhard Schussek <[email protected]> 
*/ 
final class FormEvents 
{ 
    const PRE_BIND = 'form.pre_bind'; 
    const POST_BIND = 'form.post_bind'; 
    const PRE_SET_DATA = 'form.pre_set_data'; 
    const POST_SET_DATA = 'form.post_set_data'; 
    const BIND_CLIENT_DATA = 'form.bind_client_data'; 
    const BIND_NORM_DATA = 'form.bind_norm_data'; 
    const SET_DATA = 'form.set_data'; 
} 

답변

65

이벤트의 두 가지 유형이 있습니다. 'Pre'및 'Post'이벤트는 읽기 전용입니다.

FilterDataEvent - 양식 데이터를 수정할 수있는 이벤트입니다.

데이터가 형식에 바인딩하기 전에 DataEvent 트리거 form.pre_bind. Symfony\Component\Form\Form::bind()

계기로 데이터가 형식에 바인딩 한 후 DataEvent 트리거 form.post_bind. 필드가 기본 데이터로 채워지기 전에 DataEvent form.pre_set_data Symfony\Component\Form\Form::bind()

트리거 트리거. 필드가 기본 데이터로 채워진 후 트리거 DataEvent form.post_set_data Symfony\Component\Form\Form::setData()

트리거. 데이터 형식에 바인딩하기 전에 트리거 Symfony\Component\Form\Form::setData()

form.bind_client_data FilterDataEvent 트리거. 데이터를 정규화 한 후에 FilterDataEvent 트리거 form.bind_norm_data Symfony\Component\Form\Form::bind()

트리거. 트리거 됨 : Symfony\Component\Form\Form::bind(). 기본 데이터 바인딩되는 동안 FilterDataEvent가 트리거 form.set_data (예제는 UrlType 추가) Symfony\Component\Form\Extension\Core\EventListener\FixUrlProtocolListener

를 참조하십시오. 트리거 됨 Symfony\Component\Form\Form::setData()

이러한 이벤트가 트리거되는시기와 사용 방법에 대해 더 잘 알기 위해 Form 클래스 자체를 파고 들도록 권장합니다.

+0

정말로 감사합니다. 그 사이에 양식 이벤트에 문제가 있습니다. 여유 시간이 있다면 약간의 도움을 줄 수 있습니다. http://stackoverflow.com/questions/9661026/accessing-a-form-field-from- a-form-a-form-event-in-symfony2 – Polmonino

+14

양식 이벤트에 대한이 설명은 Symfony 2.0 Form Component에서만 유효합니다. 다음 이벤트는 2.1 이후로 폐지되었으며 2.3에서 제거 될 예정입니다 :'form.bind_client_data','form.bind_norm_data','form.set_data'. 2.1 버전에서 양식 이벤트 리스너는 이제는 폐기 된 'FilterDataEvent' 및'DataEvent' 객체 대신 FormEvent 객체를받습니다.이 객체는 2.3에서 제거됩니다. –

+0

안녕하세요 @xanido, 링크가 깨졌습니다. – Mick