未定义会话的问题" setFlash" - Symfony2

时间:2015-11-10 15:16:46

标签: php symfony

我正在使用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'));
    }
}
&#13;
&#13;
&#13;
setFlash('notice', 'Bienvenue à toi '.$this->get('session')->get('user_name').' !')正在返回&#39; 未定义的方法错误&#39; 。
我确实尝试在AppKernel.php中将其声明为捆绑包的一部分,但找不到命名空间 Symfony \ Component \ HttpFoundation \ Session
在布局下方呈现

&#13;
&#13;
<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>
&#13;
&#13;
&#13;

平台信息
WAMP 2.5 Symfony 2.7

3 个答案:

答案 0 :(得分:2)

由于您已经扩展了FrameworkBundle addFlash,因此您应该可以访问名为$this->get('session')->setFlash的方法,这是在会话中添加Flash消息的快捷方式。

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

因此,只需将$this->addFlash替换为ifelse,您就应该好了。

答案 1 :(得分:1)

<强> [解决]
基于[Artamiel] [2](下文)和以下[博客] [3]的反馈 使用控制器中的$this->get('session')->setFlash更改$this->addFlash,使用TWIG模板中的app.session.getFlashes()更改app.session.get('flashes')

答案 2 :(得分:0)

注意:SF 2中不存在$session->addFlash$session->setFlash

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

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