CakePHP2を使って画像リンクをクリックしたらダウンロードダイアログを表示するようにしたい

こんにちは。オガリア開発チームの粂です。

CakePHPのバージョン:2.4

CakePHP2.3からMediaViewが非推奨となり、代わりにCakeResponseを使うことになったのですが、意外と日本語情報を探しても見つからなかったのでブログに書いておきます。
CakePHPを使って画像リンクをクリックしたらダウンロードダイアログを表示する方法についてです。

まず、HTMLのほうはこんな感じで書きます。
アプリケーション名はappだとして、Imagesコントローラーのgetアクションにfileという名前で画像ファイルを渡してあげます。

<a href="/app/images/get?file=hoge.jpg"><img src="/img/hoge.jpg"></a>

次に、Imagesコントローラーのgetアクションはこんな感じで書きます。
画像ファイルはappディレクトリの下のimagesディレクトリに格納されていると仮定します。

<?php
public function get() {
    $file = $this->data['file'];   
    $this->response->file('images/' . $file, array('download' => true));
    return $this->response;
}

オプションでdownloadにtrueを指定してあげることでダウンロードダイアログを強制的に表示することができます。

CakePHPのマニュアル該当箇所は以下になります。
http://book.cakephp.org/2.0/en/controllers/request-response.html#cake-response-file

最後までお読みいただきありがとうございました!

Pocket