Этот слушатель отправляет мне отчеты обо всех типах исключений, которые происходят на веб-сайте. Иногда я получаю отчеты об изображениях, которые были удалены, но по-прежнему используются поисковыми системами и другими пользователями.
Я хочу вместо отображения сообщения об ошибке "404 Not Found" вернуть правильное изображение. Для этого я создал таблицу базы данных, в которой хранятся старые ссылки и новые ссылки изображений, которые были удалены, перемещены или изменены.
затем этот слушатель находит в бд ссылки на упавшие и получает новые ссылки изображений. Цель состоит в том, чтобы вернуть изображение в виде http-ответа с типом содержимого заголовка в качестве изображения.
Мой код:
class ExceptionListener
{
private $service_container;
private $router;
function __construct(Container $service_container, $router){
$this->service_container = $service_container;
$this->router = $router;
}
public function onKernelException(GetResponseForExceptionEvent $event){
$exception = $event->getException();
$request = $this->service_container->get('request');
...
$document_root = $request->server->get('DOCUMENT_ROOT');
$filename = realpath($document_root . '/'. '/path/to/new_image.jpg');
$response = new \Symfony\Component\HttpFoundation\Response();
$response->headers->set('Content-type', 'image/jpeg');
$response->headers->set('Content-Disposition', 'inline; filename="' . basename($filename) . '";');
$response->headers->set('Content-length', filesize($filename));
$response->sendHeaders();
$response->setContent(file_get_contents($filename));
return $response;
...
}
}
Возникает следующая ошибка:
В браузере видно маленькое окошко, как будто пытается показать изображение, но источник изображения не может быть получен. Но если тот же код тестируется на контроллере, он работает правильно и изображение отображается.
Что я могу сделать, чтобы вернуть изображение от слушателя? спасибо
$event->setResponse($response)
. - person qooplmao   schedule 23.01.2016