Для обновления данных в базе данных (БД) в Symfony из данных, введенных в форму, следует выполнить несколько шагов.
1. Создайте сущность (Entity) для таблицы, в которой хранятся данные, которые вы хотите обновить. Для этого можно использовать Doctrine ORM (Object-Relational Mapping) в Symfony, который позволяет вам взаимодействовать с БД в виде объектов. Например, создайте сущность User для таблицы пользователей:
namespace AppEntity; use DoctrineORMMapping as ORM; /** * @ORMEntity(repositoryClass="AppRepositoryUserRepository") */ class User { // Определите свойства (поля) сущности, соответствующие столбцам в таблице БД /** * @ORMColumn(type="integer") * @ORMId() * @ORMGeneratedValue() */ private $id; /** * @ORMColumn(type="string") */ private $name; /** * @ORMColumn(type="string") */ private $email; // Определите геттеры и сеттеры для свойств public function getId(): ?int { return $this->id; } public function getName(): ?string { return $this->name; } public function setName(string $name): self { $this->name = $name; return $this; } public function getEmail(): ?string { return $this->email; } public function setEmail(string $email): self { $this->email = $email; return $this; } }
2. Создайте форму, которая будет отображать данные из БД и позволять их редактировать. Для этого можно использовать компонент Form в Symfony. Например, создайте форму для обновления данных пользователя:
namespace AppForm; use AppEntityUser; use SymfonyComponentFormAbstractType; use SymfonyComponentFormFormBuilderInterface; use SymfonyComponentOptionsResolverOptionsResolver; class UserType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('name') ->add('email'); } public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults([ 'data_class' => User::class, ]); } }
3. Создайте контроллер, который будет обрабатывать отправку данных из формы. В контроллере вы должны проверить, была ли форма отправлена (через метод POST). Если форма была отправлена, вы можете получить объект данных формы, обновить его значения и сохранить в БД. Например:
namespace AppController; use AppEntityUser; use AppFormUserType; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationRequest; use SymfonyComponentRoutingAnnotationRoute; class UserController extends AbstractController { /** * @Route("/user/{id}/edit", name="user_edit") */ public function edit(Request $request, User $user) { $form = $this->createForm(UserType::class, $user); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { $entityManager = $this->getDoctrine()->getManager(); $entityManager->persist($user); $entityManager->flush(); return $this->redirectToRoute('user_show', ['id' => $user->getId()]); } return $this->render('user/edit.html.twig', [ 'form' => $form->createView(), ]); } }
В этом примере мы создали контроллер UserController с методом edit, который обрабатывает GET-запрос на редактирование пользователя. Внутри метода мы формируем форму UserForm, связываем ее с объектом пользователя $user и передаем в шаблон. Затем, внутри этого же метода, обрабатываем POST-запрос, получаем данные из формы, обновляем значения свойств объекта пользователя и сохраняем изменения в БД через Doctrine EntityManager. Если все прошло успешно, редиректим пользователя на страницу просмотра обновленных данных пользователя.
4. Создайте шаблон для отображения формы редактирования данных пользователя (например, user/edit.html.twig). Вы можете использовать тег form и теги input или другие поля формы для отображения данных из формы. Например:
{% extends 'base.html.twig' %} {% block body %} <h1>Edit User</h1> {{ form_start(form) }} {{ form_widget(form) }} <button type="submit">Save</button> {{ form_end(form) }} {% endblock %}
5. Не забудьте настроить маршрут в файле routes.yaml, чтобы пользователь мог получить доступ к странице редактирования данных пользователя. Например:
user_edit: path: /user/{id}/edit controller: AppControllerUserController::edit
В итоге, при переходе по адресу '/user/{id}/edit' будет отображаться форма для редактирования данных пользователя, которая при отправке будет обновлять данные в БД.