2016-11-25 4 views
0

вот что у меня есть:Symfony2: набор Last-Modified в RedirectResponse

я получил маршрут, где я называю обслуживание, чтобы повернуть данное изображение.

/** 
* @Route("/media/rotate/{id}", name="rotate_image") 
* 
* @ParamConverter(name="media", class="RA\MediaBundle\Entity\Media") 
* 
* @param Media $media 
* 
* @return RedirectResponse 
*/ 
public function rotateImage(Media $media) 
{ 
    $this->get('ra.image.rotator.service')->rotateImage($media, 90); 

    // do the redirect 
} 

и вот что я хотел бы сделать:

ли редирект на маршруте я пришел из (с помощью реферера). Это работает, но после перенаправления повернутое изображение не отображается, поскольку оно кэшируется.

Поэтому я думал, что установка «Last-Modified» в заголовке текущего DateTime заставит браузер перезагрузить изображение. Я попытался сделать это следующим образом:

if ($referer = $request->headers->get('referer')) { 
     $response = new RedirectResponse($referer); 
     $response->setLastModified(new \DateTime()); 

     return $response; 
    } 

Но, к сожалению, «Last-Modified» только набор в заголовке rotate_image маршрута, а не в той, которую я получил перенаправлены.

Любая идея, как решить эту проблему?

Edit:

Я «решена» мой вопрос, просто добавив параметр версии к URLs СМИ, как это:

return $mediaUrl . '?v=' . md5($media->getUpdatedAt()->format('Y-m-d H:i:s')); 

Таким образом, после поворота изображения я обновляю СМИ чтобы версия изменилась, и будет показано «новое» изображение.

+0

Что касается сохранения в кеше повернутого изображения? :) – mmmm

+0

@mmmm извините, я действительно не понимаю. Не могли бы вы объяснить это более подробно, пожалуйста. – Ph4nt0m

+0

Возможно, я что-то не понял. Как я понимаю, у вас проблема с отображением правильно повернутого изображения, так как вы кешируете это изображение с предыдущим вращением? Поэтому я подумал, что, возможно, в контроллере, где вы вращаете изображение. Вы можете сохранить повернутое изображение в кеше. – mmmm

ответ

0

Поместите логику списка изображений в контроллер и создайте подпросы с функцией «отрисовка» с помощью функции твига: {{render (controller ('AppBundle: ImageController: index', {'media': media})) }}

Вы можете создать прослушиватель событий для «kernel.response». взгляните на symfony.com/doc/current/event_dispatcher.html Измените заголовки ответа с ним. Возможно, проверьте последнюю измененную временную метку вашего изображения.

Смежные вопросы