Php 我可以为Symfony 2服务提供读写cookie的能力吗?
我有一个服务,应该能够读和写饼干。要以类似Symfony的方式执行此操作,服务必须能够访问请求和响应。我可以想象,可以通过服务配置将请求传递给服务,但我不知道如何传递。不过,我不确定我将如何赋予服务编写cookie的能力。如有任何关于如何做到这一点的建议,将不胜感激Php 我可以为Symfony 2服务提供读写cookie的能力吗?,php,symfony,cookies,Php,Symfony,Cookies,我有一个服务,应该能够读和写饼干。要以类似Symfony的方式执行此操作,服务必须能够访问请求和响应。我可以想象,可以通过服务配置将请求传递给服务,但我不知道如何传递。不过,我不确定我将如何赋予服务编写cookie的能力。如有任何关于如何做到这一点的建议,将不胜感激 注意:我真的不希望每次使用服务时都必须手动将变量传递给服务。我认为您确实有两个选择—这取决于您试图在cookie中存储的内容以及您需要在过程中的什么时候读取并执行该工作 我建议您的第一个选择是创建一个服务,它可以访问请求并创建一个响
注意:我真的不希望每次使用服务时都必须手动将变量传递给服务。我认为您确实有两个选择—这取决于您试图在cookie中存储的内容以及您需要在过程中的什么时候读取并执行该工作 我建议您的第一个选择是创建一个服务,它可以访问请求并创建一个响应,然后返回 在services.yml中定义您的服务:
services:
a_service:
class: Acme\DemoBundle\RequestServiceClass
arguments: [@request]
scope: request
services:
a_listener:
class: Acme\DemoBundle\MyListener
tags:
- { name: kernel.event_listener, event: kernel.response, method: onKernelResponse }
你们班:
//Acme\DemoBundle\RequestServiceClass.php
class RequestServiceClass
{
private $request;
public function __construct(Request $request){
$this->request= $request;
}
public function doSomething(){
// get cookie
$value = $this->request->cookies->get('cookie');
// create cookie
$cookie = new Cookie('cookie', 'value', time() + 3600 * 24 * 7);
// create response
$response = new Response();
// set cookie in response
$response->headers->setCookie($cookie);
return $response;
}
}
那么,要使用您的服务,您可以这样做
public myAction()
{
$response = $this->get('a_service')->doSomething();
return $response;
}
另一种方法是创建内核.response
侦听器。。。它是这样做的:
// Acme\DemoBundle\MyListener.php
class MyListener
{
public function onKernelResponse(FilterResponseEvent $event)
{
$response = $event->getResponse();
$request = $event->getRequest();
// get cookie
$value = $request->cookies->get('cookie');
// create cookie
$cookie = new Cookie('cookie', 'value', time() + 3600 * 24 * 7);
// set cookie in response
$response->headers->setCookie($cookie);
}
}
将服务添加到services.yml:
services:
a_service:
class: Acme\DemoBundle\RequestServiceClass
arguments: [@request]
scope: request
services:
a_listener:
class: Acme\DemoBundle\MyListener
tags:
- { name: kernel.event_listener, event: kernel.response, method: onKernelResponse }
您的侦听器类如下所示:
// Acme\DemoBundle\MyListener.php
class MyListener
{
public function onKernelResponse(FilterResponseEvent $event)
{
$response = $event->getResponse();
$request = $event->getRequest();
// get cookie
$value = $request->cookies->get('cookie');
// create cookie
$cookie = new Cookie('cookie', 'value', time() + 3600 * 24 * 7);
// set cookie in response
$response->headers->setCookie($cookie);
}
}
这两种方法之间的区别在于在处理过程中有哪些信息可用-例如,服务可以访问您传递给它的所有信息。。。响应侦听器可以访问请求和响应中的所有内容-您可以检查响应是否符合预期(即格式或内容),然后根据此设置cookie
一些有用文档的链接可供阅读: