Класс проверки Symfony: неопределенное свойство $ groups - PullRequest
0 голосов
/ 14 сентября 2018

У меня есть следующий класс проверки OneAnswerValidator.php:

<?php

namespace App\Validator\Constraints;

use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;
use Symfony\Component\Validator\Exception\InvalidArgumentException;

class OneQuestionOneAnswerValidator extends ConstraintValidator {
    // is this necessary? In the docs doesn't appear this property
    //public $groups = [];

    public function validate($answers, Constraint $constraint) {
        if (empty($answers)) {
            return;
        }
        $questions = [];
        foreach ($answers as $answer) {
            $questionId = $answer->getQuestion()->getId();
            if (isset($questions[$questionId])) {
                $this->context
                            ->buildViolation($constraint->message)
                            ->setParameter('{{ questionId }}', $value)
                            ->addViolation();
                break;
            }
        }
    }
}

Со связанным ограничением OneAnswer.php:

<?php

namespace App\Validator\Constraints;

use Symfony\Component\Validator\Constraint;

/**
 * @Annotation
 */
class OneQuestionOneAnswer extends Constraint
{
    public $message = 'La pregunta {{ questionId }} tiene varias respuestas';
}

Но при отправке формы я получаю следующую ошибку:

[2018-09-14 13:59:38] request.CRITICAL: Uncaught PHP Exception PHPUnit\Framework\Error\Notice: "Undefined property: App\Validator\Constraints\OneQuestionOneAnswerValidator::$groups" at /Applications/MAMP/htdocs/team-analytics/vendor/symfony/form/Extension/Validator/Constraints/FormValidator.php line 84 {"exception":"[object] (PHPUnit\\Framework\\Error\\Notice(code: 8): Undefined property: App\\Validator\\Constraints\\OneQuestionOneAnswerValidator::$groups at /Applications/MAMP/htdocs/team-analytics/vendor/symfony/form/Extension/Validator/Constraints/FormValidator.php:84)"} []

В документации ничего не говорится о свойстве $groups (но ошибка устраняется, когда я добавляю это свойство в класс OneAnswerValidator). Есть идеи, почему это происходит?

Кстати, я добавляю ограничение в класс Form Type:

    ->add('answers', EntityType::class, [
        'class' => Answer::class,
        'choice_label' => 'title',
        'label' => 'Respuesta',
        'multiple' => true,
        'constraints' => new OneAnswerValidator(['message' => 'fooo'])
    ]);

Спасибо!

1 Ответ

0 голосов
/ 14 сентября 2018

В вашем Типе формы вы должны указать Ограничение (здесь OneQuestionOneAnswer), а не ConstraintValidator.

Попробуйте что-то вроде этого

->add('answers', EntityType::class, [
        'class' => Answer::class,
        'choice_label' => 'title',
        'label' => 'Respuesta',
        'multiple' => true,
        'constraints' => [new OneQuestionOneAnswer()]
    ]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...