这就是我所拥有的:
我有一条路线,我称之为服务来旋转给定的图像。
/**
* @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
}
这就是我想做的事情:
对我来自的路线进行重定向(在referer的帮助下)。 这确实有效,但在重定向后,旋转的图像不会显示,因为它已被缓存。
所以我想设置" Last-Modified"在当前DateTime的标题中会强制浏览器重新加载图像。 我尝试按以下方式进行:
if ($referer = $request->headers->get('referer')) {
$response = new RedirectResponse($referer);
$response->setLastModified(new \DateTime());
return $response;
}
但不幸的是" Last-Modified"只在rotate_image路径的标题中设置,而不是在我重定向到的那个。
知道如何解决这个问题吗?
修改
我已经解决了#34;我的问题只是将一个版本参数添加到媒体网址,如下所示:
return $mediaUrl . '?v=' . md5($media->getUpdatedAt()->format('Y-m-d H:i:s'));
因此,在旋转图像之后,我更新了媒体实体,以便版本发生变化,并且" new"图像将显示。
答案 0 :(得分:0)
将图像列表的逻辑放在控制器中并使用twig函数“render”创建子请求,如:{{render(controller('AppBundle:ImageController:index',{'media':media}))} }
您可以为“kernel.response”创建事件侦听器。看一下symfony.com/doc/current/event_dispatcher.html用它修改响应的标题。也许检查您图像的上次修改时间戳。