Я прочитал документацию Bundle (rest-bundle FOS) и не могу найти ничего при сжатии ответа, и я не могу настроить сжатие на уровне веб-сервера.
Есть ли способ заставить пакет вернуть сжатый ответ gzip (или deflate)?
В настоящее время я думаю, что нужно реализовать прослушиватель ответа, перехватить его и сжать, но я чувствую, что, вероятно, существует выходтам.
Редактировать
Мне не удалось найти в FOS Rest Bundle ничего, что позволило бы - скорее всего, они ожидают, что это будет сделано на уровне сервера.Решением было создать подписчика на событие:
public function getSubscribedEvents() {
return [KernelEvents::RESPONSE => ['compressResponse', -256]];
}
В своем методе ответа сжатия я использую deflate для содержимого тела и добавляю правильный заголовок кодирования содержимого:
public function compressResponse(FilterResponseEvent $event)
{
$response = $event->getResponse();
if ($response->headers->get('content-type') !== 'application/json') {
return;
}
$response->setContent(gzdeflate($response->getContent()));
$response->headers->set('Content-encoding', 'deflate');
}
Это хорошо подходит нашим целям.