Для работы с сущностями в Symfony через команды Doctrine, можно использовать командную строку для выполнения операций создания, чтения, обновления и удаления (CRUD).
Для создания сущности используйте команду make:entity
.
Эта команда запустит интерактивный режим, где вы сможете указать поля вашей сущности. Например:
- name: string
- description: text, nullable
- price: float
После создания сущности создайте и выполните миграции для обновления базы данных.
Создайте файл миграции:
Создайте форму для вашей сущности с помощью команды make:form
.
Создайте контроллер для управления CRUD операциями с помощью команды make:crud
.
Эта команда создаст контроллер, формы и шаблоны для всех 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
.
Автор: Евгений Морковин
1 комментарий
Круто!