У меня есть форма EditAnnouncementType
, которая встроена в форму CollectionType
. Встроенная форма имеет две формы ChoiceType
, одна из которых корректно обновляет сопоставленную сущность Announcement
. Другой, однако, попытается обновить все экземпляры объекта в моей базе данных, что приведет к этой ошибке.
Ошибка типа: Аргумент 1, передаваемый в AppBundle \ Entity \ Announcement :: setType (), должен иметь тип integer, значение NULL, вызывается в / Users / dperezpe / dev / grand-central / 673 / grand-central / vendor /symfony/symfony/src/Symfony/Component/PropertyAccess/PropertyAccessor.php в строке 528
EditAnnouncementType.php Форма type
является ошибочной.
public function buildForm(FormBuilderInterface $builder, array $options)
{
$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' => 4,
'event_type' => 5,
'statement_type' => 6,
'cat_type' => 7,
'hands_type' => 8
],
'expanded' => true,
'multiple' => false,
'required' => true,
'label_attr' => array(
'class' => 'sr-only'
),
])
->add('audience', ChoiceType::class,
[
'choices' =>
[
'Students: anybody with a student level field populated' => 'students',
'Employees: anybody with an employee ID number' => 'employees'
],
'expanded' => true,
'required' => true,
'multiple' => true
])
Тип коллекции
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('announcements', CollectionType::class,
[
'entry_type' => EditAnnouncementType::class,
'entry_options' => ['label' => false],
]);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => AnnouncementManager::class
]);
}
Я подозреваю, что это связано с различием в имени HTML, которое было отображено для этого, когда во входных данных типа отсутствует пустой []
<input type="radio"
id="announcement_edit_collection_announcements_221_type_0"
name="announcement_edit_collection[announcements][221][type]"
required="required" value="1">
<input type="checkbox" id="announcement_edit_collection_announcements_221_audience_0"
name="announcement_edit_collection[announcements][221][audience][]
"value="students">