#php #cookies #drupal-8
#php #файлы cookie #drupal-8
Вопрос:
Я пытаюсь установить cookie при каждой загрузке страницы. Я провел некоторое исследование и обнаружил, что подписчики событий — это правильный путь. Я создал пользовательский модуль с событием. Он запускает событие при каждой загрузке страницы, но проблема связана с файлами cookie.
Объект $event имеет свойство response, но оно всегда равно null. Поэтому я не могу установить какие-либо cookie.
class LanguageCookieSubscriber implements EventSubscriberInterface
{
protected $event;
protected $cookieValue;
public function init(GetResponseEvent $event) {
$this->event = $event;
$cookie = new Cookie("client_language_cookie", $this->cookieValue, 0, '/', NULL, FALSE);
$this->event->getResponse()->headers->setCookie($cookie);
}
}
Я также попытался установить объект ответа. Затем я могу установить cookie, но страница будет пустой.
$response = new Response();
$this->event->setResponse($response);
$cookie = new Cookie("client_language_cookie", $this->cookieValue, 0, '/', NULL, FALSE);
$this->event->getResponse()->headers->setCookie($cookie);
Есть идеи, как я могу это решить? Мне нужно отобразить страницу, запрошенную пользователем, и установить только cookie.
Заранее спасибо.
Комментарии:
1. У меня сейчас такая же проблема, я все еще работаю над ней. Но, вероятно, вы подписываетесь на
kernel.request
событие? В kernel.request пока нет объекта ответа, возможно, попробуйте подписаться на kernel.response
Ответ №1:
Пример:
public function onKernelResponse(ResponseEvent $event) {
$response = $event->getResponse();
$cookie = new Cookie('cookie name', 'my_cookie value', time() 60 * 60 * 24 * 7);
$response->headers->setCookie($cookie);
$event->setResponse($response);
}