【问题标题】:Issue with undefined session "setFlash" - Symfony2未定义会话“setFlash”的问题 - Symfony2
【发布时间】:2016-02-11 12:37:43
【问题描述】:

我正在处理 Symfony2 上的 tutorial(我是 PHP 新手),我在显示来自 Session 对象的 Flash 消息时遇到了困难。 在我的 Controller 代码下方

<?php

namespace tuto\WelcomeBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;


class HomepageController extends Controller
{
    public function indexAction()
    {
        $this->get('session')->setFlash('notice', 'Bienvenue à toi '.$this->get('session')->get('user_name').' !');
        return $this->render('tutoWelcomeBundle:Homepage:index.html.twig');
    }
    public function whoAmIAction($name)
    {
        # get the session
        $session = $this->get('session');
        # store the user'name in the session
        $session->set('user_name', $name);
        return $this->redirect($this->container->get('router')->generate('tutoWelcomeBundle_homepage'));
    }
}

setFlash('notice', 'Bienvenue à toi '.$this-&gt;get('session')-&gt;get('user_name').' !') 正在返回一个“未定义的方法错误”。
我确实尝试在 AppKernel.php 中将其声明为捆绑包的一部分,但找不到命名空间 Symfony\Component\HttpFoundation\Session
下面的布局渲染它

<div id="container">
  <header>
    <a href="{{ path('homepage') }}" title="Retour à l'accueil">Tutoriel Symfony2</a>
    Bonjour et bienvenue dans ce tutoriel pour Symfony2</p>
    <p>
      {% for key, flash in app.session.getFlashes()%} {%if flash%} {{flash}} {%endif%} {%endfor%}
    </p>
  </header>

  <div id="content">
    {% block content %}{% endblock %}
  </div>

平台信息
WAMP 2.5 Symfony 2.7

【问题讨论】:

    标签: php symfony


    【解决方案1】:

    注意:$session-&gt;addFlash$session-&gt;setFlash 在 SF 2 中不存在

    要直接从会话对象中设置一个 flash 消息(例如,如果你不在一个扩展 SF 基础控制器的控制器中),你可以使用下面的方法

     $session->getFlashBag()->add('[YourType]', "[YourMessage]");
    

    【讨论】:

      【解决方案2】:

      [解决方案]
      基于 [Artamiel][2](下)和以下 [博客][3] 的反馈。
      在控制器中将$this-&gt;get('session')-&gt;setFlash 更改为$this-&gt;addFlash,在TWIG 模板中将app.session.getFlashes() 更改为app.session.get('flashes')

      【讨论】:

        【解决方案3】:

        由于您已经扩展了 FrameworkBundle 的 Controller,您应该可以访问一个名为 addFlash 的方法,这是在会话中添加 Flash 消息的快捷方式。

        您可以查找方法here的定义。

        因此,只需将 $this-&gt;get('session')-&gt;setFlash 替换为 $this-&gt;addFlash 即可。

        【讨论】:

        • 感谢您的回复。但是这会在模板级别引发另一个问题“对象“Symfony\Component\HttpFoundation\Session\Session”不存在的“getFlashes”
        • 找到了解决方案。将 'app.session.getFlashes()' 更改为 'app.session.get('flashes')'
        • 如果您的问题解决了,您可以认为答案是正确的。
        猜你喜欢
        • 1970-01-01
        • 2012-05-08
        • 1970-01-01
        • 1970-01-01
        • 2015-11-17
        • 2016-10-31
        • 2021-01-01
        • 1970-01-01
        • 2015-08-29
        相关资源
        最近更新 更多