2012-03-10 3 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

はイベントの2つのタイプがあります。 'Pre'と 'Post'イベントは読み取り専用です。

FilterDataEvent - フォームデータを変更できるイベント。

form.pre_bind DataEventデータをフォームにバインドされる前にトリガ。データがフォームにバインドされた後Symfony\Component\Form\Form::bind()

form.post_bind DataEventによってトリガトリガ。フィールドは、デフォルトのデータで満たされる前に 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 Symfony\Component\Form\Extension\Core\EventListener\FixUrlProtocolListener(例えばUrlTypeによって追加された)

を参照。トリガーされたSymfony\Component\Form\Form::setData()

これらのイベントがトリガーされたときの使い心地を良くするために、Formクラス自体を掘り下げることをおすすめします。

+0

本当にありがとうございます。一方、私はフォームイベントでいくつかの問題を抱えています、あなたは多分私は少し助けを与えることができるいくつかの空き時間がある場合:http://stackoverflow.com/questions/9661026/accessing-a-form-field-from- a-form-at-a-form-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