我不知道出了什么问题,这应该很简单。
我有这个功能:
/**
*
* @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');
,这是正确的方法吗?
感谢。
答案 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