В Symfony 3.4 для вывода и отправки формы для сущности в списке сущностей рекомендуется использовать компонент Form и компонент Twig.
- Создайте форму для вашей сущности. Для этого создайте класс формы, например,
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, ]); } }
- В контроллере, отвечающем за отображение списка сущностей, создайте метод для обработки и отображения формы. Создайте новый экземпляр формы, передав в него соответствующую сущность. Затем используйте метод
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(), ]); } }
- В шаблоне
entity/list.html.twig
рендерите форму с помощью функцииform()
:
{{ form_start(entityForm) }} {{ form_widget(entityForm) }} <button type="submit">Отправить</button> {{ form_end(entityForm) }}
Теперь при открытии страницы с списком сущностей будет отображаться форма для создания новых сущностей. При отправке формы данные будут обработаны контроллером и сохранены в базе данных.