Symfony2:在RedirectResponse中设置最后修改

问题描述:

这里是我所拥有的:Symfony2:在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”在标题中的当前日期时间将迫使浏览器重新加载图像。 我试着做以下方式:

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

     return $response; 
    } 

但遗憾的是“上次修改”仅在rotate_image路线的头设置,而不是在一个我被重定向到。

任何想法如何解决这个问题?

编辑:

我已经“解决”我的问题,只需添加一个版本参数为媒体的网址是这样的:

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

因此,图像旋转之后我更新的媒体实体,以便版本将更改,并显示“新”图像。

+0

保存缓存旋转的图像呢? :) – mmmm

+0

@mmmm对不起,我真的不明白。你能否以更详细的方式解释它? – Ph4nt0m

+0

也许我误解了一些东西。我理解它的方式是,显示正确旋转的图像时存在问题,因为您正在使用上一次旋转缓存该图像?所以我想,也许在控制器中你正在旋转图像你可以将旋转后的图像保存在缓存中。 – mmmm

把图像列表的逻辑放在一个控制器中,并创建具有枝函数“渲染”的子请求:{{render(controller('AppBundle:ImageController:index',{'media':media})) }}

您可以为“kernel.response”创建事件侦听器。请看symfony.com/doc/current/event_dispatcher.html使用它修改响应的标题。也许检查你的图像的最后修改时间戳。