使用Flash消息添加页面反馈-Symfony5全面开发

您需要登录后才可观看此视频

为了更好的为您提供服务,请您登录后再查看本课程。

立即登录

我们搜索symfony flash message,我们打开symfony.com这个网站上的文档,我们点到Flash Messages这里。文档中说,我们可以在用户的Session中保存一些特殊的消息,这些特殊的消息叫做flash消息。flash消息被设计为它只会被使用一次,我们查看一下下面的代码。

这里是表单提交的代码,当表单提交之后,我们可以使用addFlash()方法添加一个flash消息。它有两个参数,第一个参数是flash消息的类型,第二个参数是flash消息的内容。然后我们往下看,在模板中,我们可以使用app的getflashs()方法来获取不同类型的消息,然后对消息进行显示。

#src/Controller/PostController.php

class PostController extends AbstractController
{
    // ...
    #[Route('/post/{id1}', name: 'post_show', methods: ['GET', 'POST'])]
    #[ParamConverter('post', options: ['id' => 'id1'])]
    public function show(Request $request, Post $post, EntityManagerInterface $entityManager,
                         PaginatorInterface $paginator, CommentRepository $commentRepository): Response
    {
        $commentForm = $this->createForm(CommentType::class);
        $commentForm->handleRequest($request);
        if ($commentForm->isSubmitted() && $commentForm->isValid()) {
            if ($commentForm->get('submit')->isClicked()) {
                /**@var Comment $data * */
                $data = $commentForm->getData();
                $data->setPost($post);
                $entityManager->persist($data);
                $entityManager->flush();
            }

            $this->addFlash('success', '您的评论已成功提交!');
        }

        $query = $commentRepository->getPaginationQuery($post);
        $pagination = $paginator->paginate(
            $query, /* query NOT result */
            $request->query->getInt('page', 1), /*page number*/
            10 /*limit per page*/
        );
        return $this->render('post/show.html.twig', [
            'post' => $post,
            'pagination' => $pagination,
            'comment_form' => $commentForm->createView()
        ]);
    }
    // ...
}

app对象是Symfony提供的一个全局对象,可以在Twig模板中使用这个全局对象。我们回到Controller,在文章详情页,当表单进行提交后,我们也添加一个flash消息。

使用$this->addFlash()方法,第一个参数是消息的类型,我们这里输入success。第二个参数是消息的内容,这里我们输入您的消息已成功提交。然后我们回到模板文件,在show.html.twig文件中,我们在content区块最顶部获取flash消息。

回到文档,我们复制最后一段代码,它会遍历app中的所有flash消息,在循环体中,使用div元素对消息进行了包裹,我们调整一下div的样式类,其中label就是消息的类型。这里我们输入alert,mt-4 alert

#templates/post/show.html.twig

{# read and display all flash messages #}
{% for label, messages in app.flashes %}
    {% for message in messages %}
        <div class="alert-{{ label }} mt-4 alert">
            {{ message }}
        </div>
    {% endfor %}
{% endfor %}

回到详情页刷新,我们手动提交一篇评论,点击提交。我们看到在文章的标题上面成功的显示了一个提醒。我们再次访问这个页面,现在这条提醒就已经没有了。

回看评论表单,在某些情况下,我们需要在表单中添加文件上传的功能。在下节课我们将创建一个文件类,用来保存表单提交的文件数据。

课程讨论

当前内容评论功能已关闭。