Переопределение сообщения подтверждения выбора Symfony

У меня есть это утверждение внутри моей сущности:

/**
* @Assert\Choice(choices = {"fiction", "non-fiction"}, message = "Choose a valid genre.")
*/
protected $genre;

И документация говорит для сообщение параметр:

тип: строка

дефолт: Выбранное вами значение не является допустимым.

Это сообщение, которое вы получите если множественная опция установлена ​​в ложь и базовое значение отсутствует в допустимом массиве вариантов.

И в моем виде формы, у меня есть:

->add('genre', ChoiceType::class, [
'multiple' => false,
])

Но когда значение Пол поле не находится в допустимом массиве вариантов («беллетристика», «не беллетристика»), сообщение об ошибке «Это значение недопустимо».

Это не значение по умолчанию и не значение, которое я установил в сущности.

Я знаю, что могу переопределить его в форме типа с помощью «invalid_messageпараметр,
но я хочу, если есть объяснение этому?

Почему «сообщение«Параметр Утверждение / Выбор не работает?
Как я могу заставить его работать так, как ожидалось в Symfony? доктор ?

0

Решение

В документах не указано, что вы можете передавать возможные значения в этом месте.
Вам необходимо создать функцию в классе (например, «getGender ()»), которая возвращает массив с допустимыми значениями.
Затем с помощью assert вы можете вызвать эту функцию следующим образом:

class Author
{
/**
* @Assert\Choice(callback = "getGender", message = "Choose a valid genre.")
*/
protected $genre;

public function getGender() {
return array("fiction", "non-fiction");
}
}

И будьте осторожны, вы использовали «выбор» вместо «обратного вызова» в аннотации;)

0

Другие решения

Мое первое замечание было бы, что
/**
* @Assert\Choice(choices = {"fiction", "non-fiction"}, message = "Choose a valid genre.")
*/
protected $genre;

имя атрибута — жанр, но в типе формы вы называете его пол.
Я думаю, это просто ошибка опечаток.
Просто переименуйте атрибут пол вместо жанра.

0