Symfony验证表格

时间:2015-04-09 13:30:07

标签: php forms validation symfony

我有一个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作为变量。

2 个答案:

答案 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
}

查看symfony best pratices