EntityType Field как получить только string после отправки формы?

В Symfony, для обработки данных из формы и получения только строки из поля EntityType, вам потребуется создать собственный процессор формы - Data Transformer.

Data Transformer - это специальный класс, который позволяет преобразовывать данные из модели в форму и обратно. В вашем случае, вы хотите получить только строку из поля EntityType после отправки формы.

Для начала нужно создать класс-трансформер, реализующий интерфейс DataTransformerInterface. Пусть это будет класс EntityTypeToStringTransformer. Вот пример его реализации:

use SymfonyComponentFormDataTransformerInterface;
use SymfonyComponentFormExceptionTransformationFailedException;
use YourBundleEntityYourEntity; // Замените YourBundleEntityYourEntity на экземпляр сущности вашего приложения.

class EntityTypeToStringTransformer implements DataTransformerInterface
{
    public function transform($entity)
    {
        // Проверяем, что значение типа сущности не является пустым
        if (null === $entity) {
            return '';
        }

        // Возвращаем только строковое представление сущности
        return $entity->getName(); // Замените getName() на нужный вам метод строки, представляющей сущность.
    }

    public function reverseTransform($string)
    {
        // Проверяем, что строка не является пустой
        if ('' === $string || null === $string) {
            return null;
        }

        // Возвращаем сущность, основанную на строковом представлении
        $entityManager = ???; // Получите экземпляр EntityManager с помощью Dependency Injection
        $entity = $entityManager->getRepository(YourEntity::class)->findOneBy(['name' => $string]); // Замените YourEntity::class на класс вашей сущности, и name на поле, которое вы хотите использовать для поиска сущности.

        // Если сущность не найдена, выбрасываем исключение
        if (null === $entity) {
            throw new TransformationFailedException(sprintf('The entity "%s" does not exist.', $string));
        }

        return $entity;
    }
}

После создания класса-трансформера, вы можете использовать его в своей форме для преобразования значений EntityType в строки и обратно. Для этого добавьте трансформер к полю EntityType с помощью метода addModelTransformer:

use SymfonyComponentFormExtensionCoreTypeTextType;
use SymfonyComponentFormFormBuilderInterface;
use SymfonyComponentOptionsResolverOptionsResolver;

class YourFormType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('yourEntityType', EntityType::class, [
                'class' => YourEntity::class,
                'choice_label' => 'name',
            ])
        ;
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => YourEntity::class,
        ));
    }
}

Теперь, после отправки формы, в методе контроллера, вы получите только строку из поля EntityType:

use AppFormYourFormType;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationRequest;
use SymfonyComponentRoutingAnnotationRoute;

class YourController extends AbstractController
{
    /**
     * @Route("/your-route", name="your-route", methods={"GET", "POST"})
     */
    public function yourAction(Request $request)
    {
        $form = $this->createForm(YourFormType::class);

        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {
            $string = $form->get('yourEntityType')->getData();

            // Обработка полученной строки

            return $this->redirectToRoute('success-page');
        }

        return $this->render('your-template.html.twig', [
            'form' => $form->createView(),
        ]);
    }
}

Теперь вы сможете получить только строковое значение из поля EntityType после отправки формы.