【问题标题】:How can I define a set of values for the NotEqualTo constraint?如何为 NotEqualTo 约束定义一组值?
【发布时间】:2014-03-11 09:39:28
【问题描述】:

在使用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]

但两种方法都不起作用。

【问题讨论】:

  • 在我读到的文档中:value: This option is required. It defines the value to compare to. It can be a string, number or object. 你是否尝试过传递对象{...}
  • @Lughino 不幸的是,没有关于如何传递对象或如何定义它的进一步解释我没有尝试过。
  • @repincln 我一直在寻找一种快速简便的方法来定义多个值,而无需使用验证组。不过谢谢你的提示。

标签: symfony validation


【解决方案1】:

我相信你可以有不止一个约束。

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,你可以使用新的 Expression 验证器,它使用 ExpressionLanguage 组件。

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

【讨论】:

  • 一个非常有用和全面的答案。谢谢!
  • @GottliebNotschnabel 不客气。顺便说一句,我已经更正了回调示例,因为我忘记使用 ExecutionContext。
猜你喜欢
  • 1970-01-01
  • 2022-10-05
  • 1970-01-01
  • 1970-01-01
  • 2022-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多