如何为NotEqualTo约束定义一组值?

时间:2014-03-11 09:39:29

标签: symfony validation

使用NotEqualTo validator constraint时,我想定义多个值。

这是用于一个值的方式:

# src/SocialBundle/Resources/config/validation.yml
Acme\SocialBundle\Entity\Person:
    properties:
        age:
            - NotEqualTo:
                value: 15

但是如何定义一组(数组)值?我试过了

            - NotEqualTo:
                value: 15
                value: 16
                value: 17

            - NotEqualTo:
                value: [15, 16, 17]

但两种方法都不起作用。

1 个答案:

答案 0 :(得分:5)

我相信你可以有多个约束。

Acme\SocialBundle\Entity\Person:
    properties:
        age:
            - NotEqualTo: { value: 15 }
            - NotEqualTo: { value: 16 }
            - NotEqualTo: { value: 17 }

或提供回调验证器

Acme\SocialBundle\Entity\Person:
    properties:
        age:
            - Callback: [validateNotOfAge]

<?php

namespace Acme\SocialBundle\Entity;

use Symfony\Component\Validator\ExecutionContextInterface;

class Person
{
    public function validateNotOfAge(ExecutionContextInterface $context)
    {
        if (in_array($this->age, array(
            15, 16, 17
        ))) {
            $context->addViolationAt(
                'age',
                'This age is not permitted',
                array(),
                null
            );
        }
    }
}

或者如果你有Symfony 2.4,你可以使用使用ExpressionLanguage组件的新Expression验证器。

Acme\SocialBundle\Entity\Person:
    properties:
        age:
            - Expression:
                expression: "this.getAge() not in [15, 16, 17]"