我有一个symfony表单。现在,我计划实现验证,为此我编写了一个validation.yml文件,如下所示
Core'AppBundle'Entity'User:
properties:
name:
- Length:
min: 5
max: 255
minMessage: "Your name should be at least {{ limit }} characters"
maxMessage: "Your name cannot be more than {{ limit }} characters"
现在,当我在Action 中使用以下代码段时,symfony使用给定的约束进行验证
$validator = $this->get('validator');
$errors = $validator->validate($user);
但是,如果我使用
if ($form->isValid()) {
}
return $response;
验证未完成。
但根据本文,Synfony在内部使用验证器服务,并将ConstraintViolationList对象转换为FieldErrors,这对我来说非常方便。
我的工作流程中可能有什么错误?
第1版:
$form = $this->createForm(new RegType(), $reg);
$reg是包含实体User作为变量的对象。
RegType的默认选项中是否将data_class设置为Core''AppBundle''Entity''User?这就是表单确定是否需要进行额外验证的方式。
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Core'AppBundle'Entity'User'
));
}
您似乎错过了句柄请求。
public function newAction(Request $request)
{
// build the form ...
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($post);
$em->flush();
return $this->redirect($this->generateUrl(
'admin_post_show',
array('id' => $post->getId())
));
}
// render the template
}
看看符号的最佳实践