表格验证 - 组OR条件

时间:2013-12-10 18:20:05

标签: php validation symfony

我有三个元素的表单 - 名称,登录和电子邮件。在validation.yml我有:

Mark\UserBundle\Entity\User:
    properties:
        name:
            - NotBlank: ~
        login:
            - NotBlank: ~
        email:
            - Email: ~
            - NotBlank: ~

一切正常,这需要namelogin。相反,我需要namelogin。 <{1}}始终是必需的。

在Symfony 1.4中,我可以使用sfValidatorOr。我如何在Symfony 2中制作它?

1 个答案:

答案 0 :(得分:0)

我认为您应该使用Callback约束来解决此问题:

// ...
use Symfony\Component\Validator\ExecutionContextInterface;

class User
{
    // ...

    public function hasCorrectCreditials(ExecutionContextInterface $context)
    {
        $isBlank = function ($val) {
            return null === $this->name || '' === $this->name;
        };

        if ($isBlank($this->name)) {
            if ($isBlank($this->login)) {
                $context->addViolationAdd('login', 'Either name or login should not be blank');
            }
        }
    }
}
Mark\UserBundle\Entity\User:
    constraints:
        - Callback: { methods: [hasCorrectCreditials] }
    properties:
        email:
            - Email: ~
            - NotBlank: ~