php – Symfony 2.4 app.session.flashbag.all()返回空值

前端之家收集整理的这篇文章主要介绍了php – Symfony 2.4 app.session.flashbag.all()返回空值前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在使用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?

如果其他主题没有回答你的问题,你可能想尝试转移你的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 %}

希望这可以帮助

原文链接:https://www.f2er.com/php/134783.html

猜你在找的PHP相关文章