如何使用silex应用程序中的Symfony 2验证组件显示Symfony 2表单错误?

时间:2012-04-11 10:15:17

标签: php symfony symfony-forms silex

后台:我正在使用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. 

});

1 个答案:

答案 0 :(得分:2)

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

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

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