我有一个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;
验证尚未完成。
但根据this文章,Synfony在内部使用验证器服务,并将ConstraintViolationList对象另外转换为FieldErrors,这对我来说非常方便。
我工作流程中的错误可能是什么?
EDIT1:
$form = $this->createForm(new RegType(), $reg);
和$ reg是一个对象,它包含实体User作为变量。
答案 0 :(得分:1)
您是否在RegType的默认选项中将data_class设置为Core \ AppBundle \ Entity \ User?这就是表单确定是否需要进行额外验证的方式。
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Core\AppBundle\Entity\User'
));
}
答案 1 :(得分:0)
您似乎错过了处理请求。
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
}