2012-07-05 12 views
6

前に、フォームの値を変更するにはどうすれば次のような状況があります。Symfony2の:検証

  • フォームフィールドの種類date
  • dd.mm.YYYY
  • などの検証パターン12.07.201212をオンヘルパーオブジェクトまたは2.502.05.2012

私の質問は次のとおりです。入力値を変換するメソッドはどこで呼び出されますか?

エンティティのsetメソッドから呼び出すと、値が実際に変更されます。しかしフォームを再度読み込むとき(例えば、不完全なサブミット)、変換された値(2.5.2012)ではなく古い値(2.5など)が表示されます。今、エンティティ内で値が変更されたことをフォームに伝えるにはどうすればよいですか?これはからである

/** 
* @ORM\Column(type="datetime", nullable=true) 
* @Assert\DateTime() 
*/ 
protected $date_start; 

これはエンティティからである

$form->bindRequest($request); 
// do some fancy stuff here 
if ($form->isValid()) {} 

PHP:

はたぶんもの間に、それを行うための別の方法がありますタイプ

$builder->add('date_start', 'datetime', array(
    'label' => 'Start Datum/Uhrzeit', 
    'date_widget' => 'single_text', 
    'time_widget' => 'single_text', 
    'date_format' => 'dd.MM.yyyy', 
    'with_seconds' => false, 
    'required' => false, 
)); 
+0

私は以下の回答を掲載しましたが、詳細が必要な場合は、フォームタイプとモデルのコードを自由に投稿してください。 – MDrollette

答えて

11

フォームとそれにバインドされたデータを変更するには2通りの方法があります。フォームイベントを使用することができます。その使用例はhereです。説明されているDataTransformerを使用することができます。here

DataTransformerが最も理にかなっています。オブジェクト内のデータを一方向に表現していますが、別の方法でフォームにデータを表示する必要があり、フォームが送信されたときにその変換を元に戻す必要があります。これはDataTransformerの目的です。

+0

多くのおかげで、 'DataTransformer'はまさに私が探しているものです。 – insertusernamehere

関連する問題