Как заменить текст в метке формы (label) на значение определенного свойства связанной сущности при использовании FormBuilder?

Как я могу настроить форму для изменения сущности "ItemAttributeIntegerType" таким образом, чтобы пользователю отображалось только поле для ввода "value" с меткой, содержащей свойство "name" из сущности "customItemAttribute"?
  • 21 мая 2024 г. 16:50
Ответы на вопрос 2
Для замены текста в метке формы на значение определенного свойства связанной сущности можно использовать FormBuilder в Symfony. Ниже приведен пример, как это можно реализовать:

```php
$form = $this->createFormBuilder($entity)
    ->add('field_name', EntityType::class, [
        'class' => 'AppBundle:RelatedEntity',
        'choice_label' => function($relatedEntity) {
            return $relatedEntity->getPropertyName();
        },
    ])
    ->getForm();
```

В данном примере, при создании формы, мы используем EntityType::class для добавления поля, которое связано с другой сущностью RelatedEntity. В параметре 'choice_label' мы указываем анонимную функцию, которая возвращает значение свойства 'propertyName' сущности RelatedEntity для отображения в метке этого поля.

Чтобы настроить форму для изменения сущности ItemAttributeIntegerType, чтобы пользователю отображалось только поле для ввода "value" с меткой, содержащей свойство "name" из сущности customItemAttribute, можно выполнить следующий код:

```php
$form = $this->createFormBuilder($itemAttributeIntegerType)
    ->add('value', IntegerType::class)
    ->add('customItemAttribute', EntityType::class, [
        'class' => CustomItemAttribute::class,
        'choice_label' => 'name'
    ])
    ->getForm();
```

В данном примере, поле для ввода "value" создается с помощью IntegerType::class, а для поля сущности CustomItemAttribute используется EntityType::class. В параметре 'choice_label' указывается свойство 'name', которое будет отображаться в метке этого поля.
Отвечаю сам на свой вопрос: 
Вдруг кому поможет, реализовал так
$builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
            $customItemAttributeName = $event->getData()->getCustomItemAttribute()->getName();
            $form = $event->getForm();
            $form
                ->add('value', TextType::class, [
                    'label' => $customItemAttributeName,
                ]);
        });
Похожие вопросы