0

我试图像这样开始(或访问)一个会话:

    $session = new Session();
    echo $session->getId();

根据文档,这应该是我所需要的,因为会话会自动启动(http://symfony.com/doc/master/components/http_foundation/sessions.html):

While it is recommended to explicitly start a session, a sessions will actually start 
on demand, that is, if any session request is made to read/write session data.

不过,我得到了错误

Failed to start the session because headers have already been sent.

这是调用服务的原始控制器:

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Bundle\FrameworkBundle\Routing\Router;
use Symfony\Component\HttpFoundation\Response;

        $auth = $this->get('authentication');
        $user_id = $auth->getUserId();

然后是 getUserId 函数:

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Session\Session;

public function getUserId() {
    $session = new Session();
    echo $session->getId();

如果我将 getUserId 更改为如下所示:

public function getUserId() {
    $session = $this->getRequest()->getSession();
    echo $session->getId();

我得到错误:

Call to a member function get() on a non-object
4

1 回答 1

2

您正在查看独立组件“HTTP Foundation”的文档。这意味着当您使用全栈框架 symfony2 时,您必须非常小心适用的内容。

Symfony2 已经处理了请求/响应和会话,因此您不需要创建任何 Session 对象。您可以在普通文档 Chapter Controller中阅读有关如何使用会话的信息。

要访问控制器中的会话,您只需要

$session = $this->getRequest()->getSession();

如果要访问服务中的会话,则需要将服务“请求”作为 service.yml 中的依赖项传递,然后通过

$session = $request->getSession();

如果你不习惯,Service Container Chapter有一些描述。

于 2012-10-22T03:44:50.780 回答