РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1235 of 1361 menu

Команда make:crud

Команда make:crud создаёт полный набор файлов для операций создания, чтения, обновления и удаления записей сущности. Первым параметром передаётся имя сущности, для которой нужно сгенерировать CRUD. Команда спрашивает имя класса контроллера и пространство имён, а затем генерирует контроллер, формы, шаблоны и маршруты.

Синтаксис

php bin/console make:crud <EntityName>

Пример

Давайте сгенерируем CRUD для сущности Article:

php bin/console make:crud Article

Команда запросит имя класса контроллера и пространство имён. После подтверждения будут созданы файлы:

created: src/Controller/ArticleController.php created: src/Form/ArticleType.php created: templates/article/index.html.twig created: templates/article/show.html.twig created: templates/article/new.html.twig created: templates/article/edit.html.twig created: templates/article/_form.html.twig created: templates/article/_delete_form.html.twig

Пример

Сгенерированный контроллер содержит методы для всех операций CRUD:

<?php namespace App\Controller; use App\Entity\Article; use App\Form\ArticleType; use App\Repository\ArticleRepository; use Doctrine\ORM\EntityManagerInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; #[Route('/article')] class ArticleController extends AbstractController { #[Route('/', name: 'app_article_index', methods: ['GET'])] public function index(ArticleRepository $articleRepository): Response { return $this->render('article/index.html.twig', [ 'articles' => $articleRepository->findAll(), ]); } #[Route('/new', name: 'app_article_new', methods: ['GET', 'POST'])] public function new(Request $request, EntityManagerInterface $entityManager): Response { $article = new Article(); $form = $this->createForm(ArticleType::class, $article); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { $entityManager->persist($article); $entityManager->flush(); return $this->redirectToRoute('app_article_index', [], Response::HTTP_SEE_OTHER); } return $this->render('article/new.html.twig', [ 'article' => $article, 'form' => $form, ]); } #[Route('/{id}', name: 'app_article_show', methods: ['GET'])] public function show(Article $article): Response { return $this->render('article/show.html.twig', [ 'article' => $article, ]); } #[Route('/{id}/edit', name: 'app_article_edit', methods: ['GET', 'POST'])] public function edit(Request $request, Article $article, EntityManagerInterface $entityManager): Response { $form = $this->createForm(ArticleType::class, $article); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { $entityManager->flush(); return $this->redirectToRoute('app_article_index', [], Response::HTTP_SEE_OTHER); } return $this->render('article/edit.html.twig', [ 'article' => $article, 'form' => $form, ]); } #[Route('/{id}', name: 'app_article_delete', methods: ['POST'])] public function delete(Request $request, Article $article, EntityManagerInterface $entityManager): Response { if ($this->isCsrfTokenValid('delete'.$article->getId(), $request->getPayload()->getString('_token'))) { $entityManager->remove($article); $entityManager->flush(); } return $this->redirectToRoute('app_article_index', [], Response::HTTP_SEE_OTHER); } } ?>

Пример

Сгенерированная форма содержит поля сущности:

<?php namespace App\Form; use App\Entity\Article; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolver; class ArticleType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options): void { $builder ->add('title') ->add('content') ->add('createdAt') ; } public function configureOptions(OptionsResolver $resolver): void { $resolver->setDefaults([ 'data_class' => Article::class, ]); } } ?>

Пример

Шаблон списка статей выводит таблицу со всеми записями:

{% extends 'base.html.twig' %} {% block title %}Article index{% endblock %} {% block body %} <h1>Article index</h1> <table class="table"> <thead> <tr> <th>Id</th> <th>Title</th> <th>Content</th> <th>CreatedAt</th> <th>actions</th> </tr> </thead> <tbody> {% for article in articles %} <tr> <td>{{ article.id }}</td> <td>{{ article.title }}</td> <td>{{ article.content }}</td> <td>{{ article.createdAt ? article.createdAt|date('Y-m-d H:i:s') : '' }}</td> <td> <a href="{{ path('app_article_show', {'id': article.id}) }}">show</a> <a href="{{ path('app_article_edit', {'id': article.id}) }}">edit</a> </td> </tr> {% else %} <tr> <td colspan="5">no records found</td> </tr> {% endfor %} </tbody> </table> <a href="{{ path('app_article_new') }}">Create new</a> {% endblock %}

Смотрите также

  • команда make:entity,
    которая создаёт сущность Doctrine
  • команда make:form,
    которая создаёт класс формы
  • команда make:controller,
    которая создаёт класс контроллера
  • команда make:migration,
    которая создаёт миграцию Doctrine
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить