Top.Mail.Ru

Работа с сущностями в symfony

Работа с сущностями в symfony

Для работы с сущностями в Symfony через команды Doctrine, можно использовать командную строку для выполнения операций создания, чтения, обновления и удаления (CRUD). 

Для создания сущности используйте команду make:entity.

php bin/console make:entity Product

Эта команда запустит интерактивный режим, где вы сможете указать поля вашей сущности. Например:

  • name: string
  • description: text, nullable
  • price: float

После создания сущности создайте и выполните миграции для обновления базы данных.

Создайте файл миграции:

php bin/console make:migration
 
Выполните миграцию:
 
php bin/console doctrine:migrations:migrate
 

Создайте форму для вашей сущности с помощью команды make:form.

php bin/console make:form ProductType

Создайте контроллер для управления CRUD операциями с помощью команды make:crud.

php bin/console make:crud Product
 

Эта команда создаст контроллер, формы и шаблоны для всех CRUD операций. Контроллер будет выглядеть примерно так:

// src/Controller/ProductController.php

namespace App\Controller;

use App\Entity\Product;
use App\Form\ProductType;
use App\Repository\ProductRepository;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;

/**
 * @Route("/product")
class ProductController extends AbstractController
{
    /**
     * @Route("/", name="product_index", methods={"GET"})
     */
    public function index(ProductRepository $productRepository): Response
    {
        return $this->render('product/index.html.twig', [
            'products' => $productRepository->findAll(),
        ]);
    }

    /**
     * @Route("/new", name="product_new", methods={"GET","POST"})
     */
    public function new(Request $request, EntityManagerInterface $entityManager): Response
    {
        $product = new Product();
        $form = $this->createForm(ProductType::class, $product);
        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {
            $entityManager->persist($product);
            $entityManager->flush();

            return $this->redirectToRoute('product_index');
        }

        return $this->render('product/new.html.twig', [
            'product' => $product,
            'form' => $form->createView(),
        ]);
    }

    /**
     * @Route("/{id}", name="product_show", methods={"GET"})
     */
    public function show(Product $product): Response
    {
        return $this->render('product/show.html.twig', [
            'product' => $product,
        ]);
    }

    /**
     * @Route("/{id}/edit", name="product_edit", methods={"GET","POST"})
     */
    public function edit(Request $request, Product $product, EntityManagerInterface $entityManager): Response
    {
        $form = $this->createForm(ProductType::class, $product);
        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {
            $entityManager->flush();

            return $this->redirectToRoute('product_index');
        }

        return $this->render('product/edit.html.twig', [
            'product' => $product,
            'form' => $form->createView(),
        ]);
    }

    /**
     * @Route("/{id}", name="product_delete", methods={"POST"})
     */
    public function delete(Request $request, Product $product, EntityManagerInterface $entityManager): Response
    {
        if ($this->isCsrfTokenValid('delete'.$product->getId(), $request->request->get('_token'))) {
            $entityManager->remove($product);
            $entityManager->flush();
        }

        return $this->redirectToRoute('product_index');
    }
}

 

Symfony автоматически создаст базовые шаблоны для всех действий (index, new, show, edit). Эти шаблоны находятся в каталоге templates/product.

Автор:

75

Читайте также

1 комментарий

  • Имя автора
    vasia@gmail.com
    31.05.2024 в 05:34

    Круто!