В 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 после отправки формы.