2

背景: Symfony Forms と Symfony Validation コンポーネントを使用して、Silex アプリケーションのアプリケーション登録ページでフォームをレンダリングしています。

フォームが正しく機能し、レンダリング、クライアント側の検証、エンティティへのデータのバインドが行われました。エンティティを正しく検証し、予想されるエラーを生成する検証メソッドをエンティティに追加しました。

質問: 返された ConstraintValidationList からエラーを取り出してフォームに戻し、twig {{ form_errors }} ビュー ヘルパーを使用してフロント エンドに表示したいと考えています。

http://api.symfony.com/2.0/Symfony/Component/Form/Form.htmlの API ドキュメントを参照しましたが、これを行う正しい方法がわかりません。私が探しているものを達成する方法を知っている人はいますか?

私のSilexコントローラークロージャーのコードは次のとおりです。

$app->post('/register-handler', function(Request $request) use($app)
{
    // Empty domain object 
    $user = new MppInt\Entity\User();

    // Create the form, passing in a new form object and the empty domain object
    $form = $app['form.factory']->create(new MppInt\Form\Type\RegisterType(), $user);

    // Bind the request data to the form which puts it into the underlying domain object
    $form->bindRequest($request);   

    // Validate the domain object using a set of validators.
    // $violations is a ConstraintValidationList
    $violations = $app['validator']->validate($user);

    // Missing step - How do I get a ConstraintValidationList back into the 
    // form to render the errors in the twig template using the {{ form_errors() }}
    // Helper. 

});
4

1 に答える 1

2

バインド リクエストの段階でバリデーターをデータに対して実行する必要があるため、自分で検証サービスを使用する必要はありません。(Silex ではなく Sf2 から来て、検証サービスは Form に関連付けられています。Silex でこれを手動で行う必要があるかどうかはわかりません)

各フィールドでエラー バブリングが有効になっていない限り、{{ form_errors() }} を使用してエラーを表示するために、エラーはフォームのフィールド (子) に保持されます。

もし本当にconstraintViolationListをフォームエラーにする必要があるなら、それらをSymfony\Component\Form\FormErrorオブジェクトに変換し、$form->addError(FormError $formError);でフォームに追加することができます。

于 2012-04-11T11:00:55.273 に答える