Cakephp 如何使用Symfony 2读取Cookie?

Cakephp 如何使用Symfony 2读取Cookie?,cakephp,symfony,cookies,Cakephp,Symfony,Cookies,我正在为我工作的公司使用的web应用程序构建一个替代品。它是使用CakePHP1.3构建的,我正在使用Symfony 2从头重写它。这两个系统将并行运行,各种功能将转移到Symfony 2,并从旧的CakePHP应用程序中删除 为了避免与登录细节混淆,我希望CakePHP处理用户登录方面的事情,直到我完全可以关闭CakePHP并依赖于Symfony 2的安全性为止。同时,CakePHP应用程序生成一个包含用户ID的cookie。我想将此cookie用于Symfony作为基本的安全形式 但是,我无

我正在为我工作的公司使用的web应用程序构建一个替代品。它是使用CakePHP1.3构建的,我正在使用Symfony 2从头重写它。这两个系统将并行运行,各种功能将转移到Symfony 2,并从旧的CakePHP应用程序中删除

为了避免与登录细节混淆,我希望CakePHP处理用户登录方面的事情,直到我完全可以关闭CakePHP并依赖于Symfony 2的安全性为止。同时,CakePHP应用程序生成一个包含用户ID的cookie。我想将此cookie用于Symfony作为基本的安全形式

但是,我无法让Symfony读取或加载已创建的cookie。这是我的密码:

public function securitytestAction()
{   

    $request = $this->getRequest($_COOKIE);
    $cookie = $request->headers->getCookies('CakeCookie[passport]');

    print_r($cookie);

    return $this->render('InstructorBundle:Default:test.html.twig');
}
使用Firebug,CakePHP在登录期间生成的Cookie被命名为“CakeCookie[passport]”。它也没有加密

我得到的错误是:

FatalErrorException:错误:调用未定义的方法 中的Symfony\Component\HttpFoundation\HeaderBag::getCookies() DefaultController.php第713行

我该怎么做才能让它工作

编辑
Cheesemaly建议更换:

$request = $this->getRequest($_COOKIE);
$cookie = $request->headers->getCookies();
仅此而已:

$request = $this->getRequest()->cookies->all();
我得到以下回应:

数组([PHPSESSID]=>gptbmh61mfkqn6p86d3suhnt13)

编辑2
我一直在看CakePHP用来生成Cookie的代码,但它没有为Cookie提供域。我现在已经修复了它,因此域是
.domain.org
,这样子域也可以访问它


现在,当我使用Firebug访问Symfony2应用程序时,我可以看到列出的Cookie以及另外两个CakePHP会话Cookie(我不需要)。3个CakePHP域都使用
www.domain.org
,即使在查看子域
new.domain.org
时也是如此,而Symfony2使用的cookie将其域名显示为
new.domain.org
.Symfony2,但仍然拒绝加载我想要的cookie。

在每次请求期间,默认情况下,Symfony2将在Twig和PHP模板引擎中设置全局模板变量app。app变量是一个GlobalVariables实例,可让您自动访问某些特定于应用程序的变量:

app.security - The security context.
app.user - The current user object.
app.request - The request object.
app.session - The session object.
app.environment - The current environment (dev, prod, etc).
app.debug - True if in debug mode. False otherwise.
示例: 在细枝中:{{app.request.method} 在PHP中:echo$app->getRequest()->getMethod()在twig:{{app.user.username} 但是对于会话对象: 在细枝中:{{app.session.varname}
在PHP中://我不知道,你知道怎么称呼它吗?

我在朋友的帮助下找到了它

本质上,在CakePHP中设置的cookie不包含路径。为了解决这个问题,我添加了以下PHP代码:

$value = $someone['User']['id'];
setcookie("passport", $value, time()+1200, "/", ".domain.org");
然后我检查了Symfony2,没有更改上一次编辑的代码,然后Symfony2就可以拿起cookie了


谢谢大家的帮助

如果您在没有参数的情况下调用
$request->headers->getCookies()
,会怎么样?我得到了相同的错误@cheesemacfly,我会相应地更改问题,先生。使用
$this->getRequest()->cookies->all()
怎么样?或者
$this->getRequest()->cookies->get('CakeCookie[passport]”)
?使用更改编辑我的答案。你的第二个建议没有得到答复。我已经检查了Firebug,Cookie设置在旧应用程序中。这两个应用程序都在哪里(哪个域/路径)?