В Symfony 3.4 для вывода и отправки формы для сущности в списке сущностей рекомендуется использовать компонент Form и компонент Twig.
1. Создайте форму для вашей сущности. Для этого создайте класс формы, например, EntityFormType
, который должен наследоваться от AbstractType
. В этом классе определите поля формы, соответствующие полям вашей сущности, и их валидаторы:
use SymfonyComponentFormAbstractType; use SymfonyComponentFormExtensionCoreTypeTextType; use SymfonyComponentFormFormBuilderInterface; use SymfonyComponentOptionsResolverOptionsResolver; class EntityFormType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('field1', TextType::class) ->add('field2', TextType::class) //... ; } public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults([ 'data_class' => Entity::class, ]); } }
2. В контроллере, отвечающем за отображение списка сущностей, создайте метод для обработки и отображения формы. Создайте новый экземпляр формы, передав в него соответствующую сущность. Затем используйте метод createView()
для создания объекта FormView
, который будет передан в шаблон для рендеринга:
use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationRequest; use SymfonyComponentRoutingAnnotationRoute; class EntityController extends AbstractController { /** * @Route("/entity/list", name="entity_list") */ public function list(Request $request) { $entity = new Entity(); $form = $this->createForm(EntityFormType::class, $entity); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { // обработка формы $entityManager = $this->getDoctrine()->getManager(); $entityManager->persist($entity); $entityManager->flush(); // ... return $this->redirectToRoute('entity_list'); } return $this->render('entity/list.html.twig', [ 'entityForm' => $form->createView(), ]); } }
3. В шаблоне entity/list.html.twig
рендерите форму с помощью функции form()
:
{{ form_start(entityForm) }} {{ form_widget(entityForm) }} <button type="submit">Отправить</button> {{ form_end(entityForm) }}
Теперь при открытии страницы с списком сущностей будет отображаться форма для создания новых сущностей. При отправке формы данные будут обработаны контроллером и сохранены в базе данных.