Комментарии и субкомментарии с AJAX в Symfony - PullRequest
0 голосов
/ 02 ноября 2018

Хорошо .. у меня есть это действие в ArticleController:

/**
 * @Route("/articles/{category}/{id}", name="article")
 */
public function getArticle($category, $id)
{
    $articleRepo = $this->getDoctrine()->getRepository(Article::class);
    $article = $articleRepo->find($id);

    $categoryRepo = $this->getDoctrine()->getRepository(ArticleCategory::class);
    $categories = $categoryRepo->findAll();

    $categoryId = $categoryRepo->getCategoryIdByCode($category);
    $lastArticles = $articleRepo->getLimitArticles($categoryId, 3);

    $nextArticle = $articleRepo->getNextArticle($categoryId, $id);
    $previousArticle = $articleRepo->getPreviousArticle($categoryId, $id);

    if (is_null($nextArticle)) {
        $nextArticle = $articleRepo->getRandomArticle($categoryId, $id);
    }

    if (is_null($previousArticle)) {
        $previousArticle = $articleRepo->getRandomArticle($categoryId, $id);
    }

    $commentForm = $this->createForm(CommentFormType::class);
    $answerForm = $this->createForm(CommentFormType::class);

    $commentRepo = $this->getDoctrine()->getRepository(Comment::class);
    $comments = $commentRepo->getComments($id);


    foreach ($comments as $comment) {
        $subcomments = $commentRepo->getSubComments($comment->getId());
        $comment->subComments = $subcomments;
    }

    return $this->render('articles/article.html.twig', [
        'article' => $article,
        'categories' => $categories,
        'lastArticles' => $lastArticles,
        'nextArticle' => $nextArticle,
        'previousArticle' => $previousArticle,
        'commentForm' => $commentForm->createView(),
        'answerForm' => $answerForm->createView(),
        'comments' => $comments
    ]);

}

Все в порядке, возвращается файл просмотра с необходимыми данными. Но теперь я хочу, чтобы он динамически работал с AJAX. Но я не уверен, как это сделать.

Первый вариант : чтобы изменить этот метод для возврата всех данных в вызов ajax (JSON) и для заполнения элементов с помощью jquery. И вызывать метод при загрузке страницы и когда кто-то добавляет новый комментарий.

Второй вариант : создать другой метод (первый метод по-прежнему будет отображать представление, а не JSON Response), который получает только сообщения, и вызывать его с AJAX, когда кто-то добавляет новый комментарий, без отправки AJAX на странице загрузить, только если кто-то добавит пост. (но здесь у меня будет та же логика в двух методах). Затем добавить новый div для последнего добавленного элемента в другие элементы div.

Третий вариант :? Если кто-то может мне помочь?

Я не хочу, чтобы кто-то писал код для меня, я хочу, чтобы кто-то сказал мне, какой это правильный способ сделать это в Symfony.

...