2

背景:我正在使用 Symfony Forms 和 Symfony Validation 组件在我的 Silex 应用程序的应用程序注册页面中呈现表单。

我让表单正常工作、呈现、客户端验证并将数据绑定到我的实体。我已向实体添加了一种验证方法,该方法可以正确验证实体并产生预期的错误。

问题:我现在想将错误从返回的 ConstraintValidationList 中取出并返回到表单中,以便使用 twig {{ form_errors }} 视图助手将它们显示在前端。

我在以下网址查阅了 API 文档:http ://api.symfony.com/2.0/Symfony/Component/Form/Form.html并且看不到执行此操作的正确方法。有谁知道如何实现我正在寻找的东西?

这是我的 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

在绑定请求阶段,验证器应该在数据上运行,因此您不需要自己使用验证服务。(来自 Sf2 而不是 Silex,验证器服务与 Form 我不知道您是否必须为 Silex 手动执行此操作)

除非在每个字段上启用错误冒泡,否则错误将保存在表单的字段(子项)中,以便使用 {{ form_errors() }} 显示错误

虽然如果你真的需要将 constraintViolationList 转化为表单错误,你可以将它们转换为 Symfony\Component\Form\FormError 对象并使用 $form->addError(FormError $formError); 将它们添加到表单中。

于 2012-04-11T11:00:55.273 回答