1

シンプルなフォームがあり、誕生日の入力にjquery UIの日付ピッカーを使用しています。

サーバー側では、symfony の検証と日付の検証を使用します。

問題は、検証が次の形式の入力のみを受け入れることです: YYYY-MM-DD

ただし、英国などの他の地域では、形式は次のとおりです: DD/MM/YYYY

サーバーはそれにエラーを出します。

何か提案はありますか?

内部バリデーションで symfony フォーム オブジェクトを使用しているため、手動でフォーマットを強制的に変更したくありません。

4

1 に答える 1

1

ドキュメント「 date 」から読み取れるように、制約の日付は検証のみの形式「YYYY-MM-DD」を実行します。

したがって、次の 2 つの選択肢があります。

1 つ (最も単純で論理的な方法) は、フォーム フィールド " format "で書式を手動で設定することです。

$builder->add('date', 'date', array(
    'widget' => 'single_text',
    'format' => 'dd-MM-yyyy',
));

このようにして、フォーム自体が日付を逆にし、正しい形式をバリデーター (およびデータベース) に渡します。

もう 1 つは、制約コールバック「callback」を作成し、独自の検証ロジックを作成することです。

文字列の結合に挿入される場合でも、別の方法があり、それは制約正規表現「regex」です。

このようにして、非常に正確な (そして複雑な) 正規表現を作成する必要があります。

最初の解決策が最も適しているのと同じくらい単純な問題の場合!

編集:

jquery ui datepicker は入力タイプのテキストにロックされるため、手動で作成する必要はありません。

例に書いたように、 を使用する'widget' => 'single_text'と、入力タイプのテキストが生成されます!

jqueryで日付フィールドにフックするために、クラスを日付フィールドに設定できます。

簡単な例:

形:

$builder->add('date', 'date', array(
    'widget' => 'single_text',
    'format' => 'dd-MM-yyyy',
    'attr'   =>  array(
            'class'   => 'your_class'),
));

JavaScript:

$(function() {
    $( ".your_class" ).datepicker();
});
于 2013-10-13T19:12:53.727 に答える