RedirectToRoute()后Symfony 4 flash消息无法正常工作

时间:2018-05-05 19:51:33

标签: symfony4

我不知道出了什么问题,这应该很简单。

我有这个功能:

/**
 *
 * @Route("/fin/carteira/list", name="carteira_list")
 */
public function list(Request $request) {
    $repo = $this->getDoctrine()->getRepository(Carteira::class);
    $dados = $repo->findAll();

    return $this->render('financeiro/carteiraList.html.twig', array (
            'dados' => $dados 
    ));
}

另一个功能是执行'删除';

/**
 *
 * @Route("/fin/carteira/{id}/delete", name="carteira_delete")
 * @Method("POST")
 *
 */
public function delete(Request $request, Carteira $carteira) {
    if (! $this->isCsrfTokenValid('delete', $request->request->get('token'))) {
        $this->addFlash('error', 'Erro interno do sistema.');
    } else {
        try {
            $em = $this->getDoctrine()->getManager();
            $em->remove($carteira);
            $em->flush();
            $this->addFlash('success', 'post.deleted_successfully');
        } catch ( \Exception $e ) {
            $this->addFlash('error', 'Erro ao deletar carteira.');
        }
    }

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

在我的树枝模板上:

{% for flashMessage in app.flashes('error') %}

<div class="alert alert-danger alert-dismissible fade show" role="alert">
    <h4 class="alert-heading">Erro</h4>
    <p>{{ flashMessage }}</p>
</div>

{% endfor %}

但它并没有显示任何内容。

实际上,如果我删除return $this->redirectToRoute('carteira_list');并点击F5重新加载页面,则显示出错误的div。

但是我做错了什么?不是return $this->redirectToRoute('carteira_list');,这是正确的方法吗?

感谢。

4 个答案:

答案 0 :(得分:2)

尝试用以下代码替换您的Twig代码。我认为应该可以。

{% for label, flashes in app.session.flashbag.all %}
    {% for flash in flashes %}
        {% if ( label == 'success' ) %}
            <div class="alert alert-success alert-dismissible fade show">
                {{ flash }}
            </div>
        {% elseif ( label == 'error' ) %}
            <div class="alert alert-danger alert-dismissible fade show">
                {{ flash }}
            </div>
        {% endif %}
    {% endfor %}
{% endfor %}

答案 1 :(得分:1)

根据文档https://symfony.com/doc/current/controller.html#flash-messages,对于任何类型的消息,甚至更短的消息,请在您的Twig模板中尝试。

      {# display any flash message #}    
      {% for label, messages in app.flashes %}
        {% for message in messages %}
            <div class="alert alert-{{ label }} alert-dismissible fade show">
                {{ message }}
            </div>
        {% endfor %}
      {% endfor %}

答案 2 :(得分:0)

我遇到了类似的问题,它不是来自Symfony甚至不是PHP,而是Google Chrome浏览器,我在其他浏览器上运行了相同的代码,并且运行正常。

答案 3 :(得分:0)

有点晚了,但是我认为您的树枝代码仅呈现“错误”类型的消息。因此,删除后的消息将永远不会显示,因为它的类型为“成功”。

{% for flashMessage in app.flashes('error') %}

因此,请使用以下内容:

        {% for label, messages in app.flashes %}
            {% for message in messages %}
                <div class="flash-{{ label }}">
                    {{ message }}
                </div>
            {% endfor %}
        {% endfor %}

来源:https://symfony.com/doc/current/controller.html#flash-messages