Validation 为什么不考虑Symfony2验证约束?

Validation 为什么不考虑Symfony2验证约束?,validation,symfony,yaml,Validation,Symfony,Yaml,我对Symfony 2.2中的验证约束有一个问题 似乎没有考虑“用户名”和“通过”的验证约束。但“唯一性”约束是有效的 我不认为我在yaml语法上犯了错误 这是yml语法: Fastre\PhpFtpAdminBundle\Entity\Account: properties: username: - Regex: {pattern: "/[a-zA-Z0-9]+/", message: Le nom d'utilisateur ne peut contenir que

我对Symfony 2.2中的验证约束有一个问题

似乎没有考虑“用户名”和“通过”的验证约束。但“唯一性”约束是有效的

我不认为我在yaml语法上犯了错误

这是yml语法:

Fastre\PhpFtpAdminBundle\Entity\Account:
properties:
    username:
        - Regex: {pattern: "/[a-zA-Z0-9]+/", message: Le nom d'utilisateur ne peut contenir que des lettres minuscules et majuscules et des chiffres.}
    pass: 
        - Length: {min: 8, minMessage: "Your name must have at least {{ limit }} characters."} 
constraints:
    - Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity: {fields: [username], groups: [registration]}
在控制器中:

if ($request->getMethod() === 'POST') {

        $form->bind($request);

        $data = $form->getData();



        $errors = $this->get('validator')->validate($data, array('Default'));

        //throw new \Exception($errors->count());

        if ($errors->count() == 0) { //the errors->count() is always set to 0!
            $em->flush();

            //TODO: i18n
            $this->get('session')
                    ->getFlashBag()
                    ->add('notice', 'Compte '.$account->getUsername().' modifié');

            return $this->redirect($this->generateUrl('account_list'));

        } else {


            foreach ($errors as $error) {
                $this->get('session')
                    ->getFlashBag()
                    ->add('warning', $error->getMessage()); 
            }

            return $this->render('FastrePhpFtpAdminBundle:Accounts:form.html.twig',
                array(
                    'form' => $form->createView(),
                    'action_path' => $this->generateUrl('account_view', array('id' => $id))
                    )
                );
        }

    }
执行此操作时:

$errors = $this->get('validator')->validate($data, array('Default'));
您只验证验证组
默认值
。但是由于您的设置,您的
uniquentity
约束仅适用于
注册
组:

{fields: [username], groups: [registration]}
因此,您可以删除组以进行
uniquentity
验证,也可以通过第二次调用进行验证,如:

$errors = $this->get('validator')->validate($data, array('registration'));

在旁注上,而不是:

    $form->bind($request);
    $data = $form->getData();
    $errors = $this->get('validator')->validate($data, array('Default'));
    if ($errors->count() == 0) { 
        //do your stuff
    }
我强烈建议使用更简单的方法:

    $form->bind($request);

    if ($form->isValid()) {
        // do your stuff
    }
对于本例中的组验证,请参考:

执行此操作时:

$errors = $this->get('validator')->validate($data, array('Default'));
您只验证验证组
默认值
。但是由于您的设置,您的
uniquentity
约束仅适用于
注册
组:

{fields: [username], groups: [registration]}
因此,您可以删除组以进行
uniquentity
验证,也可以通过第二次调用进行验证,如:

$errors = $this->get('validator')->validate($data, array('registration'));

在旁注上,而不是:

    $form->bind($request);
    $data = $form->getData();
    $errors = $this->get('validator')->validate($data, array('Default'));
    if ($errors->count() == 0) { 
        //do your stuff
    }
我强烈建议使用更简单的方法:

    $form->bind($request);

    if ($form->isValid()) {
        // do your stuff
    }
对于本例中的组验证,请参考:


你是对的。我认为它存在一个“默认”验证组,我认为我使用了它。我认为不可能对验证组进行表单验证。我认为代码“$form->”是有效的(数组('registration');”这是行不通的。是吗?你说得对。如果要对表单执行验证组,必须在表单类型
setDefaultOptions()
中设置该组,或者如果不使用表单类型,则在
createFormBuilder()
调用中设置该组。您是对的。我认为它存在一个“默认”验证组,我认为我使用了它。我认为不可能对验证组进行表单验证。我认为代码“$form->”是有效的(数组('registration');”这是行不通的。是吗?你说得对。如果要对表单执行验证组,必须在表单类型
setDefaultOptions()
中设置该组,如果不使用表单类型,则必须在
createFormBuilder()调用中设置该组。