我在使用flashbag消息时遇到了麻烦.我的情况很简单:
我的代码
>使用表单编辑页面:
# src/Namespace/MyBundle/Resources/views/Edit/form.html.twig <form action="{{ path('form_url_save',{'id': id }) }}" method="POST"> {{ form_widget(form) }} </form>
>通过控制器将数据表保存在数据库中:
# src/Namespace/MyBundle/Controller/EntityController.PHP public function saveAction(Request $request,Entity $entity = null) { try { if (!$entity) { $entity = new Entity(); } $form = $this->createForm(new EntityType(),$entity); if ($request->getMethod() == 'POST') { $form->submit($request); if ($form->isValid()) { // Entity manager $em = $this->getDoctrine()->getManager(); // Persist data $em->persist($form->getData()); // Saving process $em->flush(); // Add flashbag message $this->get('session')->getFlashBag()->add('success','The backup was done successfully')); } else { throw new \Exception($form->getErrorsAsString()); } } } catch (\Exception $e) { $this->get('session')->getFlashBag()->add('error',$e->getMessage()); } return $this->redirect('home_page_url'); }
>在前面显示成功的消息:
# app/Resources/views/front.html.twig <html> <head></head> <body> <div class="main"> {% set flashbag = app.session.flashbag.all %} {% if flashbag is not empty %} <div class="messages-container"> {% for type,messages in flashbag %} {% for message in messages %} <div class="alert alert-{{ type }}"> {{ message }} </div> {% endfor %} {% endfor %} </div> {% endif %} <div class="content"> // My content </div> </div> </body> </html>
我的主题是如何组织的?
app/Resources/views/front.html.twig |__ src/Namespace/MyBundle/Resources/views/Edit/form.html.twig // extends front.html.twig
我的麻烦:
>在front.html.twig中的app.session.flashbag.all
==> Flashbag是空的
> form.html.twig中的app.session.flashbag.all
==> Flashbag很好,并有成功的消息
那么为什么我不能把代码放在front.html.twig中呢?
我偶然发现了同样的问题并发现了这个:
Symfony2 FlashBag stopped working after upgrade to 2.4?
原文链接:https://www.f2er.com/php/134783.html如果其他主题没有回答你的问题,你可能想尝试转移你的flashbag来看它的结构.这样做,尝试在你的树枝模板中添加:
{% set array = app.session.flashbag.all %} {% dump(array) %}
你可能会对结果感到惊讶,至少我曾经这样做过:
array(1) { ["test"]=> array(1) { [0]=> string(28) "Ceci est un test de flashbag" } }
这意味着你的flashbag中确实有消息,但你无法以正确的方式获取内容,因为它在第二个数组中.我的解决方案
{% for tag,line in array %} {% for underline in line %} <div class="{{tag}}">{{ underline }}</div> {% endfor %} {% endfor %}
希望这可以帮助