9

次のような状況があります。

  • フォーム フィールド タイプdate
  • のような検証パターンdd.mm.YYYY
  • またはなど12に変わるヘルパーオブジェクト。12.07.20122.502.05.2012

私の質問は、入力値を変換するメソッドをどこで呼び出すかです。

setエンティティのメソッドから呼び出すと、値が実際に変更されます。しかし、フォームを再度ロードすると (不完全な送信など2.5)、変換された値 ( ) ではなく、古い値 ( など2.5.2012) が表示されます。では、エンティティ内で値が変更されたことをフォームに伝えるにはどうすればよいでしょうか。

間にそれを行う別の方法もあるかもしれません:

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

PHP

これはエンティティからのものです:

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

これはTypeからのものです:

$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,
));
4

1 に答える 1

13

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

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

于 2012-07-05T16:17:21.627 に答える