将cookie附加到Symfony2中的视图

Jam*_*day 6 cookies http-headers symfony

我在Symfony2中找到了一些关于cookie的问题和页面,但似乎没有就这究竟是如何工作的问题达成任何明确的共识.当然,我可以回到使用PHP的本机setcookie函数,但我觉得使用Symfony2也应该是一件容易的事情.

我在我的控制器中有一个动作,我只想返回一个带有cookie的视图.到目前为止,我看起来基本上是这样的例子:

use Symfony\Compentnt\HttpFoundation\Response;

public function indexAction() {
  $response = new Response();
  $response->headers->setCookie(new Cookie('name', 'value', 0, '/');
  $response->send();
}
Run Code Online (Sandbox Code Playgroud)

这个问题是它发送响应......并且不呈现视图.如果我在不发送标题的情况下设置cookie,则会呈现视图,但不会发送标题(cookie).

在我周围找到了sendHeaders()响应对象中的方法,所以我现在在返回之前手动调用它,这似乎有效:

public function indexAction() {
  ...
  $response->sendHeaders();
  return array('variables' => 'values');
}
Run Code Online (Sandbox Code Playgroud)

但这真的是预期使用的模式吗?在symfony的早期版本中,我可以在控制器中设置标头,并期望视图控制器处理发送的任何内容.现在看来我必须从动作中手动发送它们才能使它工作,这意味着我必须从我设置标题的任何动作中调用它.这是否是这种情况或者是否有一些我错过的东西是如此明显以至于在任何文档中都没有人提到它甚至没有提到它?

Kas*_*een 19

我认为你的选择正确:

$response->headers->setCookie(new Cookie('name', 'value', 0, '/'));
Run Code Online (Sandbox Code Playgroud)

如果您正在尝试渲染模板,请在此处查看文档:

Symfony2模板服务

如果你看一下这条线:

return $this->render('AcmeArticleBundle:Article:index.html.twig');
Run Code Online (Sandbox Code Playgroud)

基本上,render方法返回一个响应(控制器然后返回),它具有twig模板的内容,你所要做的就是截取:

$response = $this->render('AcmeArticleBundle:Article:index.html.twig');
$response->headers->setCookie(new Cookie('name', 'value', 0, '/'));
return $response;
Run Code Online (Sandbox Code Playgroud)

无论如何,我认为就是这样......

  • 将近7年后,我可能参加聚会的时间很晚,但是在类似```{{render(controller(“ AppBundle:SomeControllerName:someActionName”))}}```的渲染动作中使用cookie时,除非您明确使用```$ response-> sendHeaders()` (2认同)