2011-11-06 9 views
6

問題1アクセスエラーが、私はAjaxの提出を経て登録フォームを構築したいのですが、フォーム

を提出しました。登録作業は$form->isValid()です。しかし、フォームが登録に失敗した場合は、これらのエラーをajax経由で返す必要があります。

if ($form->isValid()) { 

}else{ 
    $errors = $form->getErrors(); 
    // return some json encoded errors here 
} 

$form->getErrors()フォーム(この場合には、私は短すぎるのユーザ名とテストしてい)検証していないにもかかわらず、空の配列を返します。

問題2

は、私が持っている第二の問題は、フォームが検証場合ということですが、エラーが依然として存在します。たとえば、誰かが同じ値を送信しようとする固有のフィールドです。

if ($form->isValid()) { 

    $em = $this->getDoctrine()->getEntityManager(); 
    $em->persist($form->getData()); 
    $em->flush(); 

    // error could be a username submitted more than once, username is unique field 

}else{ 
    // ... 
} 

どのようにエラーを捕捉してjson経由で返すことができますか?

答えて

7

問題あなたは、フォームオブジェクトにエラーを移動するためにerror_bubblingを使用することができ、フォームビルダで1

array (
    0 => 
    Symfony\Component\Form\FormError::__set_state(array(
    'messageTemplate' => 'Your username must have at least {{ limit }} characters.', 
    'messageParameters' => 
    array (
     '{{ value }}' => '1', 
     '{{ limit }}' => 2, 
    ), 
)), 
) [] [] 
のようなものを

$form->getErrors(); 

出力:

$builder->add('username','text', array('error_bubbling'=>true)); 

、あなたはこのようなあなたのフォームオブジェクトでエラーにアクセスすることができます:あなたはこのようなオプションとして、それを渡す、フィールドを指定した場合

fyi:フォーム/タイプを使用している場合は、error_bubblingをデフォルト値に設定することはできません。各フィールドに割り当てる必要があります。

お役立ちリンク:http://symfony.com/doc/2.0/reference/forms/types/text.html#error-bubbling

問題

http://symfony.com/doc/2.0/reference/constraints/UniqueEntity.html

4

通報1

エラーは、フォーム自体にはありません。 Form::getErrorsはフォームオブジェクト自体にエラーがあった場合のみエラーを返します。フォームをトラバースし、各子のエラーをチェックする必要があります。

Form::isValidこれとは逆に、子供をたどってそのうちのどれかが無効であるかどうかを確認するだけです。 2

まだあなたの検証が完了していないことを意味し、検証後に「エラー」がある場合

問題。アプリケーションで非標準の制約が必要な場合は、カスタム制約を作成するだけです。詳細については、the cookbook entry on writing custom validator constraintsを参照してください。

+0

2は、どのようにバリデータは、誰かがすでにテーブルでそのユーザー名を使用していることを知っているだろうか?バリデーターはデータが正しいかどうか、データが既に存在するかどうか、または両方があるかどうかを確認したと思います。 – ed209

+0

バリデーターは、あなたが行うようにコード化した任意のタイプのバリデーションを実行できます。もちろん、既に指摘したように、一意性のバリデータはUniqueEntityです。 –

関連する問題