2016-11-25 2 views
0

ここに私が持っているもの:Symfony2:RedirectResponseでLast-Modifiedを設定

私は与えられたイメージを回転させるサービスを呼び出すルートを持っています。

/** 
* @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 
} 

と、ここで私がやりたいものです。

私は(リファラの助けを借りて)から来たルート上のリダイレクトを行います。 これはうまくいきますが、リダイレクト後、回転されたイメージはキャッシュされているため表示されません。

私は、現在のDateTimeのヘッダーに "Last-Modified"を設定すると、ブラウザが画像をリロードすることが強制されると考えました。私はそれを次のように実行しようとしました :

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

     return $response; 
    } 

しかし残念ながら「Last-Modifiedのは、」のみrotate_imageルートのヘッダーではなく、私がでリダイレクトされた1に設定されています。

どのようにすればこの問題を解決できますか?

編集:

私はちょうどこのようなメディアのURLにversionパラメータを追加することで、私の問題を「解決」している:

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

をので、画像を回転させた後、私はメディアを更新していますエンティティが変更され、バージョンが変更され、「新しい」イメージが表示されます。

+0

キャッシュされたイメージをキャッシュするのはどうですか? :) – mmmm

+0

@mmmm申し訳ありませんが、私は本当にそれを取得しません。もっと詳しく説明してください。 – Ph4nt0m

+0

多分私は何か誤解していました。私が理解していることは、あなたが正しく回転されたイメージを表示して問題を抱えていることです。前回の回転でこのイメージをキャッシュしていますか?だから私はおそらくあなたがイメージを回転しているコントローラの中にあると思った。回転したイメージをキャッシュに保存することができた。 – mmmm

答えて

0

イメージリストのロジックをコントローラに入れて、twig関数 "render"を使ってサブリクエストを作成します:{render(controller( 'AppBundle:ImageController:index'、{'media':media}))) }}

"kernel.response"のイベントリスナーを作成できます。 symfony.com/doc/current/event_dispatcher.htmlでヘッダーを修正してください。画像の最終更新タイムスタンプを確認することがあります。

関連する問題