2016-11-25 50 views
0

這裏是我所擁有的: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

回答

0

把圖像列表的邏輯放在一個控制器中,並創建具有枝函數「渲染」的子請求:{{render(controller('AppBundle:ImageController:index',{'media':media})) }}

您可以爲「kernel.response」創建事件偵聽器。請看symfony.com/doc/current/event_dispatcher.html使用它修改響應的標題。也許檢查你的圖像的最後修改時間戳。