Добавить поле формы в дочернюю форму в Symfony - PullRequest
0 голосов
/ 25 сентября 2018

Symfony 4.1

Это мой личный тип формы:

class PersonalType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('firstName', TextType::class, [
                'required' => true,
                'attr'     => [
                    'placeholder' => 'First name'
                ],
            ])
    //......

Это мой ClientType, использующий PersonalType в качестве дочерней формы

    class ClientType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
      $client = $builder->getData();
        $builder
            ->add('personalDetails', PersonalType::class, [
                'data' => $client
            ])
//....

Я добавилПрослушиватель событий для дочернего типа формы, но он не вызывается, поэтому я переместил EventListener в ClientType.

Я хотел добавить поле в PersonalType, и я сделал это так:

$builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
          $client = $event->getData();
          $form = $event->getForm();

$form->add('title', TextType::class, [
   'type' => new PersonType(),
    'label' => 'Title'
]
    }

но у меня ошибка: option "type" does not exists

Что мне здесь не хватает?

1 Ответ

0 голосов
/ 25 сентября 2018

Параметр ['type' => ...] не является допустимым параметром TextType Symfony.Для получения информации о допустимых параметрах см. Ссылку здесь: https://symfony.com/doc/current/reference/forms/types/text.html. Здесь также можно просмотреть действительные параметры других типов встроенных форм: https://symfony.com/doc/current/reference/forms/types.html.

Возможно, вы видели пользовательский тип формыкоторый определяет опцию «type», имея метод configurationOptions с setDefaults или setRequired (см. здесь: https://symfony.com/doc/current/form/create_custom_field_type.html). Я предполагаю, что это из вашего PersonType. TextType не поддерживает это.

Я не уверен, что именно вы хотите сделать со строкой

   'type' => new PersonType(),
* 1015. * Если вы просто пытаетесь добавить поле "title" в свой PersonType, и по какой-то причинеВы хотите сделать это с помощью прослушивателя событий, а не непосредственно в классе PersonType (который был бы самым простым вариантом в большинстве сценариев), вам кажется, что достаточно просто удалить эту строку, чтобы она заработала?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...