#php #symfony #symfony-forms
#php #symfony #symfony-forms
Вопрос:
У меня есть объект объявления, к которому привязана EditAnnouncementType
форма. У меня есть две другие CheckBoxType
формы, которые автоматически обновляют свои соответствующие поля, но ChoiceType
форма не работает.
$builder
->add('edit', SubmitType::class,
array
(
'label' => 'Save changes',
'attr' => ['class' => 'btn btn-primary']
))
->add('type', ChoiceType::class,
[
'choices' => [
'info_type' => 1,
'star_type' => 2,
'alert_type' => 3,
'lightbulb_type' => 3,
'event_type' => 4,
'statement_type' => 5,
'cat_type' => 6,
'hands_type' => 7
],
'mapped' => true,
'expanded' => true,
'required' => true,
])
Объект объявления и поле типа
class Announcement
{
/**
* @var int
*/
private $type;
/**
* @return string
*/
public function getType(): string
{
return $this->type;
}
/**
* @param int $type
*
* @return $this
*/
public function setType(int $type)
{
$this->type = $type;
return $this;
}
Ответ №1:
Я подозреваю, что Symfony каким-то образом строго проверяет значение (используя ===
).
И поскольку ваш метод получения возвращает string
, сопоставление не выполняется должным образом.
Вам следует попробовать исправить свой геттер:
/**
* @return int
*/
public function getType(): int
{
return $this->type;
}
Также имейте в виду, что у вас может возникнуть проблема в вашем массиве выбора:
// be careful: those two have the same value
'alert_type' => 3,
'lightbulb_type' => 3,
Это, несомненно, вызвало бы проблему для Symfony, особенно если он использует array_values
для того, чтобы выбрать правильный выбор из значения вашей сущности.
Комментарии:
1. исправлено, что средство получения возвращало значение int, но все еще не работает
2. Также: что насчет дублированного значения 3? (см. Отредактированный ответ)
3. принимая этот ответ, хотя я не смог точно воспроизвести, почему он начал работать. где-то между публикацией этого вопроса и сейчас я изменил
mapped
наfalse
. изменение его обратно наtrue
исправлено. Возвращаемая строка не имела значения