#php #forms #symfony #collections
#php #формы #symfony #Коллекции
Вопрос:
У меня есть SmsType
, EmailType
и VoiceCallType
все они содержат следующую коллекцию:
->add('answers', CollectionType::class, [
'label' => 'form.communication.fields.answers',
'entry_type' => AnswerType::class,
'entry_options' => [
'label' => false,
],
'allow_add' => true,
'allow_delete' => true,
'delete_empty' => true,
'prototype' => true,
'required' => false,
'attr' => [
'class' => 'collection',
],
])
Для упрощения я создал AnswersType
поле, имеющее CollectionType
родительский тип:
<?php
namespace AppFormType;
use SymfonyComponentFormAbstractType;
use SymfonyComponentFormExtensionCoreTypeCollectionType;
use SymfonyComponentOptionsResolverOptionsResolver;
class AnswersType extends AbstractType
{
public function setDefaultOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'label' => 'form.communication.fields.answers',
'entry_type' => AnswerType::class,
'entry_options' => [
'label' => false,
],
'allow_add' => true,
'allow_delete' => true,
'delete_empty' => true,
'prototype' => true,
'required' => false,
'attr' => [
'class' => 'collection',
],
]);
}
public function getParent()
{
return CollectionType::class;
}
}
И используйте ->add('answers', AnswersType::class)
для всех типов форм вместо большого блока.
По какой-то причине результирующая разметка не совпадает:
Без AnswersType
, form_row()
генерирует следующую разметку:
<fieldset class="form-group"><div id="campaign_trigger_answers" class="collection" data-prototype=" amp;<div class=amp;quot;row answer-rowamp;quot; style=amp;quot;margin-bottom: 5px;amp;quot; id=amp;quot;answer-nb-__name__amp;quot;amp;> amp;<div class=amp;quot;col-10amp;quot;amp;> amp;<input type=amp;quot;textamp;quot; id=amp;quot;campaign_trigger_answers___name__amp;quot; name=amp;quot;campaign[trigger][answers][__name__]amp;quot; placeholder=amp;quot;Saisir une réponseamp;quot; class=amp;quot;answer-input form-controlamp;quot; /amp;> amp;</divamp;> amp;<div class=amp;quot;col-2 text-rightamp;quot;amp;> amp;<a href=amp;quot;#amp;quot; data-index=amp;quot;__name__amp;quot; class=amp;quot;remove-answer btn btn-dangeramp;quot;amp;>Xamp;</aamp;> amp;</divamp;> amp;</divamp;> "></div></fieldset>
С AnswerType
помощью , form_row()
генерирует следующую разметку:
<fieldset class="form-group"><div id="campaign_trigger_answers"></div></fieldset>
Как вы можете видеть, prototype
атрибут AnswersType больше не генерируется, хотя я установил для параметра значение true . В чем моя ошибка?