私はあなたに本当にいくつかのオプションがあると思います - それは実際にあなたがクッキーに保存しようとしていることと、作業のどの時点で作業を行う必要があるのかによって異なります。
services:
a_service:
class: Acme\DemoBundle\RequestServiceClass
arguments: [@request]
scope: request
:
は私が
services.ymlであなたのサービスを定義します...あなたの最初のオプションは、その要求にアクセスしており、それが返すレスポンスを作成し、サービスを作成することであることを示唆しています
あなたのクラス:次に
//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;
}
それを行うための他の方法、kernel.response
リスナーを作成している...その次のように行わ:
はservices.ymlするサービスを追加します。
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);
}
}
2つの方法の違いは、処理の際に利用可能なものの情報である - たとえばサービスは、あなたがそれを渡すすべてにアクセス権を持っている... RESPO nseリスナーは、リクエストとレスポンスのすべてにアクセスできます。レスポンスが期待通りのものかどうか(つまり、フォーマットやコンテンツ)を確認し、それに従ってクッキーを設定することができます。
読むためにいくつかの有用なドキュメントへのリンク:
応答イベントリスナーは完璧なソリューションのようです。ありがとう。 – Hubro