后台:我正在使用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.
});
答案 0 :(得分:2)
在绑定请求阶段,应该对数据运行验证程序,因此您不需要自己使用验证服务。 (来自Sf2而不是Silex,验证器服务与表单I相关联,我不知道您是否必须手动为Silex执行此操作)
除非在每个字段上启用错误冒泡,否则错误将保存在表单的字段(子项)中,以便使用{{form_errors()}}显示错误
虽然如果你真的需要将一个constraintViolationList转换为表单错误,你可以将它们转换为Symfony \ Component \ Form \ FormError对象,然后使用$ form-&gt; addError(FormError $ formError)将它们添加到表单中; < / p>