Я хочу использовать поля из нескольких объектов в одной форме, могу ли я это сделать? Например, я хочу добавить в поле формы одной формы из поля ProfileType
и name
профиля и из поля CountryType
. Эти поля должны быть простой строкой ( text
).
Как мне это сделать? Благодаря!
ПРИМЕЧАНИЕ. Я не могу использовать тип сущности , потому что Symfony предоставляет только флажки , переключатели и выбирает для него, однако мне нужно использовать простое текстовое поле.
Чтобы включить поля от связанных объектов в форме, вы встраиваете собственный тип формы для каждого связанного объекта. Теоретически можно отображать и обновлять все данные для сложного объекта со многими отношениями в одной форме. На практике это для отношений toMany может усложниться, но это просто для отношений между One. См. « Встроенные формы». Вставка одного объекта в документацию Symfony Forms.
Например, в типе формы для вашего основного объекта:
public function buildForm(FormBuilderInterface $builder, array $options) { ... $builder->add('profile', new ProfileType()); $builder->add('country', new CountryType()); ... } public function setDefaultOptions(OptionsResolverInterface $resolver) { $resolver->setDefaults(array( ..., 'cascade_validation' => true, )); }
Затем в вашей ветке вы можете добавить нужные вам поля:
{{ form_widget(form.profile.surname) }} {{ form_widget(form.country.name) }}
Предполагая, что ваш ProfileType и CountryType добавят другие поля в свои формы, тогда, если вы используете «form_rest (form)» в своей ветке, вы получите другие поля, которые вы не хотите, или если вы не используете form_rest, то в зависимости от того, какая версия symfony вы используете, вы можете получить ошибки. Существует несколько способов справиться с этим.
Я иногда использую 'form_widget (_token)' вместо 'form_rest (form)', чтобы обойти эту проблему. Однако я не знаю, можете ли вы полагаться на это, продолжая работать в будущем. Вы можете обернуть «form_rest (form)» в скрытый div, поскольку он обычно используется только для добавления скрытого поля «_token», и в этом случае вы не хотите видеть другие поля Profile и Country. В этом случае значения скрытых объектов по-прежнему отображаются в форму и обратно с любыми соответствующими служебными данными, но значения не могут быть изменены.
В качестве альтернативы вы можете иметь несколько типов форм для своих профилей и стран и использовать соответствующий для контекста. Я не знаю, для чего нужна ваша форма, но, например, у вас может быть EditThingProfileType и EditThingCountryType для использования в методе buildForm () выше, каждый из которых добавляет только одно поле, которое требуется в вашей форме.