Как обновить данные в БД данными из Формы?

Для обновления данных в базе данных (БД) в 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' будет отображаться форма для редактирования данных пользователя, которая при отправке будет обновлять данные в БД.