1

ユーザーが日付を入力するための3つのフィールド(日、月、年)があるとします。(おそらく最善の方法ではありませんが、この例ではそれを使用しています)。ユーザーのリクエストに応じようとすると、Symfonyはモデル上に存在しないメソッド$form->bind()を探します。->setMonth()

strtotime()以前に入力(または他の任意のコードやメソッド)を実行してから、新しい出力をマップすることをSymfonyに伝えるにはどうすればよいsetDate()ですか?

4

2 に答える 2

4

まず、これらのフィールドには対応するEntityプロパティがないことをsymfonyに伝える必要があります。これは、「property_path」オプションで次のように実行されます。

$builder->add("field1", "text", array(
    "property_path" => false
));

コントローラで、フォームが有効であることを確認したら、エンティティを永続化する前に、次のようなものを使用してこれらのフィールドの値を取得できます。

$field1 = $form->get('field1')->getData();

次に、これらの値を使用して、必要に応じてエンティティプロパティを作成します。次に例を示します。

$entity->setWhatever($field1.$field2.$field3);

これらのフィールドに対して何らかの検証を行う必要がある場合は、コールバックバリデーターを作成するのが最善のオプションです。

于 2012-09-03T18:05:09.563 に答える
1

ユーザークラスの1つのプロパティ「date」に複数のhtmlフィールドを使用しないでください。

参照:http ://symfony.com/doc/current/reference/forms/types/date.html

オプション「widget」のおかげで、フィールドの日付を好きなようにレンダリングできます。

あなたの場合、3つのフィールドが必要で、値「choice」を設定する必要があります(3つの選択入力をレンダリングします。選択の順序はパターンオプションで定義されます)。

ここに、フォームクラスのコードがあります。

$builder->add('date', 'date', array(
    'widget' => 'choice',
));

また、フォームの送信後にタイムスタンプ( "strtotime")を取得する必要があります。

$builder->add('date', 'date', array(
    'widget' => 'choice',
    'input' => 'timestamp',
));

たとえば、JS日付ピッカーをアクティブ化するテキストフィールドだけを取得するなど、他のオプションで遊ぶことができます。

于 2012-09-03T15:47:52.610 に答える