Как реализовать комментария в symfony 4?

В Symfony 4 комментарии могут быть реализованы с использованием Doctrine ORM и базы данных. Ниже приведены шаги, которые следует выполнить для реализации системы комментариев в Symfony 4.

Шаг 1: Создание сущности Comment

Создайте новую сущность Comment с помощью Doctrine ORM. Она должна содержать поля, такие как id, body, author, created_at и т. д. Например:


// src/Entity/Comment.php

namespace AppEntity;

use DoctrineORMMapping as ORM;

/**
 * @ORMEntity(repositoryClass="AppRepositoryCommentRepository")
 */
class Comment
{
    /**
     * @ORMId()
     * @ORMGeneratedValue()
     * @ORMColumn(type="integer")
     */
    private $id;

    /**
     * @ORMColumn(type="text")
     */
    private $body;

    /**
     * @ORMColumn(type="string", length=255)
     */
    private $author;

    /**
     * @ORMColumn(type="datetime")
     */
    private $createdAt;

    // Геттеры и сеттеры для всех полей

    public function __construct()
    {
        $this->createdAt = new DateTime();
    }
}

Шаг 2: Создание контроллера CommentController

Создайте контроллер CommentController, который будет отвечать за обработку операций CRUD (создание, чтение, обновление и удаление) с комментариями.


// src/Controller/CommentController.php

namespace AppController;

use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentRoutingAnnotationRoute;
use SymfonyComponentHttpFoundationRequest;
use AppEntityComment;
use AppFormCommentType;

/**
 * @Route("/comments")
 */
class CommentController extends AbstractController
{
    /**
     * @Route("/", name="comment_index", methods="GET")
     */
    public function index()
    {
        $comments = $this->getDoctrine()->getRepository(Comment::class)->findAll();

        return $this->render('comment/index.html.twig', ['comments' => $comments]);
    }

    /**
     * @Route("/new", name="comment_new", methods={"GET","POST"})
     */
    public function new(Request $request)
    {
        $comment = new Comment();
        $form = $this->createForm(CommentType::class, $comment);
        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {
            $entityManager = $this->getDoctrine()->getManager();
            $entityManager->persist($comment);
            $entityManager->flush();

            return $this->redirectToRoute('comment_show', ['id' => $comment->getId()]);
        }

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

    /**
     * @Route("/{id}", name="comment_show", methods="GET")
     */
    public function show(Comment $comment)
    {
        return $this->render('comment/show.html.twig', ['comment' => $comment]);
    }

    /**
     * @Route("/{id}/edit", name="comment_edit", methods={"GET","POST"})
     */
    public function edit(Request $request, Comment $comment)
    {
        $form = $this->createForm(CommentType::class, $comment);
        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {
            $this->getDoctrine()->getManager()->flush();

            return $this->redirectToRoute('comment_edit', ['id' => $comment->getId()]);
        }

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

    /**
     * @Route("/{id}", name="comment_delete", methods="DELETE")
     */
    public function delete(Request $request, Comment $comment)
    {
        if ($this->isCsrfTokenValid('delete'.$comment->getId(), $request->request->get('_token'))) {
            $entityManager = $this->getDoctrine()->getManager();
            $entityManager->remove($comment);
            $entityManager->flush();
        }

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

Шаг 3: Создание формы для комментариев

Создайте форму с использованием Symfony Form Component для создания и редактирования комментариев. Форма будет привязана к сущности Comment и будет содержать поля для полей Comment (например, body и author). Например:


// src/Form/CommentType.php

namespace AppForm;

use SymfonyComponentFormAbstractType;
use SymfonyComponentFormFormBuilderInterface;
use SymfonyComponentOptionsResolverOptionsResolver;
use AppEntityComment;

class CommentType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('body')
            ->add('author')
        ;
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => Comment::class,
        ]);
    }
}

Шаг 4: Создание шаблонов представлений

Создайте шаблоны представлений для отображения списка комментариев, создания, просмотра и редактирования комментариев. Например:

- index.html.twig для отображения списка комментариев


{# templates/comment/index.html.twig #}

{% for comment in comments %}
    <h2>{{ comment.author }}</h2>
    <p>{{ comment.body }}</p>
{% endfor %}

- new.html.twig для создания нового комментария


{# templates/comment/new.html.twig #}

{{ form_start(form) }}
    {{ form_widget(form) }}
    <button type="submit">Create</button>
{{ form_end(form) }}

- show.html.twig для просмотра комментария


{# templates/comment/show.html.twig #}

<h2>{{ comment.author }}</h2>
<p>{{ comment.body }}</p>

- edit.html.twig для редактирования комментария


{# templates/comment/edit.html.twig #}

{{ form_start(form) }}
    {{ form_widget(form) }}
    <button type="submit">Update</button>
{{ form_end(form) }}

После выполнения всех шагов система комментариев должна успешно работать в вашем приложении Symfony 4. Вы должны иметь возможность создавать, просматривать, редактировать и удалять комментарии.