#php #forms #symfony #twig
#php #формы #symfony #twig
Вопрос:
У меня проблема с отображением формы: я хотел бы определить несколько похожих полей формы (передать их в массиве или создать в цикле), а затем я хотел бы отобразить их в twig в цикле, подобном этому:
{% for field in form.collection %}
<li>
{{ form_label(field) }}
{{ form_widget(field) }}
</li>
{% endfor %}
Причина: мне нужно иметь доступ к метке и виджету каждого поля при его рендеринге в цикле (не зная имени каждого поля). Мне кажется, что единственный способ — это иметь CollectionType.
Это не основано ни на какой сущности. Я видел документы с примерами с сущностями, но можно ли добавлять поля вручную?
Что-то вроде:
class FormcollectionType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('collection', CollectionType::class, [
// each entry in the array will be an "ChoiceType" field
'entry_type' => ChoiceType::class,
// these options are passed to each "collection" type
'entry_options' => [
'attr' => ['class' => 'someclass'],
],
// How to define few ChoiceType fields in CollectionType here, manually ?
]);
Спасибо за любую помощь 🙂
Ответ №1:
Спасибо,
на самом деле, в чем хитрость, так это в поле «данные»….
итак:
$builder->add('collection', CollectionType::class, [
'entry_type' => ChoiceType::class,
'entry_options' => [
'attr' => ['class' => 'someclass'],
'choices' => [
'Nashville' => 'nashville',
'Paris' => 'paris',
'Berlin' => 'berlin',
'London' => 'london',
],
],
'data' => ['choice1Field' => 'choice1',
'choice2Field' => 'choice2' ]
]);
Комментарии:
1. Таким образом, я могу добавить много типов выбора, передав массив в ‘data’, но есть ли аналогичный способ, если я хочу добавить несколько пар, скажем [ChoiceType, SubmitType]?