【问题标题】:Request Sessions return FatalErrorException: Error: Call to a member function get() on a non-object请求会话返回 FatalErrorException:错误:调用非对象上的成员函数 get()
【发布时间】:2013-11-29 15:07:34
【问题描述】:

我正在使用 symfony 并尝试设置和获取会话变量以通过 twig 模板传递。

我尝试了 symfony 示例中的方法:http://symfony.com/doc/current/components/http_foundation/sessions.html

$session = new Session();
$session->start();

// set and get session attributes
$session->set('name', 'Drak');
$session->get('name');

树枝:

{{ app.session.get('balance') }}

返回此错误消息:

在渲染模板期间抛出异常(“无法启动会话:已由 PHP 启动($_SESSION 已设置)。”)

我检查了我的 php.ini 并且会话没有自动启动,也没有其他会话实时。

我也试过这种方式:

   $session = $this->getRequest()->getSession();
// We store an attribute
        $session->set('FrenchTouch', 'Julian');
// in another controller for another request, we retrieve the value of this attribute
        $value = $session->get('FrenchTouch');
        print_r(array($value));

但返回另一个错误:

FatalErrorException: 错误:在非对象上调用成员函数 get()

【问题讨论】:

  • 根据 Symfony 文档,a session will start on demand。尝试摆脱$session->start();这一行
  • 已经尝试并得到以下错误:在渲染模板期间引发异常(“无法启动会话:已由 PHP 启动($_SESSION 已设置)。”)跨度>

标签: php session symfony


【解决方案1】:

从容器中获取会话

$session = $this->container->get('session');

【讨论】:

  • 同样的事情:FatalErrorException:错误:在 UserController.php 第 29 行的非对象上调用成员函数 get():$session = $this->container->get('session' ); $session->set('name', 'Sensorario'); $test = $session->get('name'); print_r($test);
  • 你扩展注入容器的框架控制器吗?
  • 我正在从另一个控制器创建一个新实例,我修复了它注入容器。
【解决方案2】:

我确实找到了答案,

问题不在于获取/设置会话,问题出现是因为我正在通过控制器传递信息并且我使用的是非本地 symfony 方式。在控制器中传递信息的正确方法是:

$response = $this->forward('YourBundle:YourController:YourAction', array(
 'user'=>$user
));
return $response;

然后在另一个控制器中设置会话并渲染模板。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多