Ich denke, Sie haben wirklich ein paar Optionen - es hängt wirklich davon ab, was Sie in einem Cookie speichern möchten und an welchem Punkt des Prozesses Sie lesen müssen, um die Arbeit zu tun.
Ich schlage vor, Ihre erste Option ist, einen Dienst zu erstellen, dass die die Anforderung Zugriff hat und erzeugt eine Antwort, die es gibt ...
Ihren Dienst in services.yml definieren:
services:
a_service:
class: Acme\DemoBundle\RequestServiceClass
arguments: [@request]
scope: request
Ihre Klasse:
//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;
}
}
Dann Ihren Service nutzen Sie tun so etwas wie dieses
public myAction()
{
$response = $this->get('a_service')->doSomething();
return $response;
}
Der andere Weg, es zu tun, ist ein kernel.response
Zuhörer ... seine wie dies getan zu schaffen:
hinzufügen Service services.yml:
services:
a_listener:
class: Acme\DemoBundle\MyListener
tags:
- { name: kernel.event_listener, event: kernel.response, method: onKernelResponse }
Ihre Zuhörer Klasse sieht wie folgt aus :
// 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);
}
}
der Unterschied zwischen den zwei Verfahren ist, welche Informationen zum Zeitpunkt des Prozesses zur Verfügung steht - zum Beispiel hat die Service-Zugriff auf alles, was Sie es passieren ... die respo nse Listener hat Zugriff auf alles in der Anfrage und der Antwort - Sie können überprüfen, ob die Antwort wie erwartet ist (dh Format oder Inhalt) und dann einen Cookie entsprechend setzen.
Einige Links zu einigen nützlichen Dokumentation zu lesen:
Der Antwort Event Listener sieht wie die perfekte Lösung aus! Vielen Dank. – Hubro