Использовать ограничение внутри валидатора

1

Я использую валидатор symfony2 для проверки формы и запроса POST API.

Я сделал мой валидатор следующим образом:

public function validate($content, Constraint $constraint)
{
    if (in_array($constraint->type, self::DNS_TYPE, true) === false) {
        $this->context->buildViolation('This DNS type is not valid.')
            ->atPath($constraint->type)
            ->addViolation();
    }

    switch ($constraint->type) {
        case 'A':
            $contentConstraint = new Assert\Ip(['version' => '4']);
            break;
        case 'AAAA':
            $contentConstraint = new Assert\Ip(['version' => '6']);
            break;
        case 'CNAME':
        case 'NS':
        case 'MX':
            $contentConstraint = new Assert\Regex(['pattern' => '/^[[:alnum:]-\._]+$/u']);
            break;
        default:
            $contentConstraint = false;
            break;
    }

    // This part don't work
    if ($this->validate('1.1.1.1', $contentConstraint)) {
        $this->context->buildViolation('his value is not correct.')
            ->atPath($content)
            ->addViolation();
    }
}

Первый обратный вызов и коммутатор работают с моей формой, но когда используется второй обратный вызов, symfony возвращает ошибку

Опция "type" не существует в ограничении Symfony\Component\Validator\Constraints\Ip

Я не понимаю, что не так с моим ограничением. Почему эта ошибка говорит о том, что у моего ip-ограничения нет опции type?

Как я могу это исправить? Возможно, я не могу использовать ip ограничение в валидаторе?

благодаря

Теги:
validation

1 ответ

1
Лучший ответ

Ограничение http://api.symfony.com/2.3/Symfony/Component/Validator/Constraints/Ip.html не имеет свойства type. Если вам это нужно, вы должны расширить Symfony\Component\Validator\Constraints\Ip

  • 0
    Мне не нужна эта собственность, я даже не знаю, откуда эта собственность. Когда я использую это в другом классе, это работает хорошо. Я не понимаю, почему только в этом классе у меня есть эта ошибка

Ещё вопросы

Сообщество Overcoder
Наверх
Меню