CakePHPの $html->image() はとても便利なのだけれど、
- 複数プロジェクトが混在している
- プロジェクトAから画像ファイルをアップロードする
- プロジェクトBから、上の画像を参照する
ということをしようとした場合、$html->image だと「プロジェクトのパス+指定した画像名(パスから入力している場合は、画像パス)」となってしまうので若干不便。
仕方がないので以下のようにした。
/home/username 配下のディレクトリ構成は以下。
色々あって若干トリッキーな置き方をしている自覚はある・・・!
ちなみにcakeディレクトリは別のとこ(/usr/local/lib/php/cake)に配置。
_app_core/ ←共通設定を置くプロジェクト config/ controllers/ models/ views/ admin/ ←システム管理用プロジェクト config/ controllers/ locale/ models/ plugins/ tests/ tmp/ vendors/ views/ app/ ←一般公開用プロジェクト config/ controllers/ locale/ models/ plugins/ tests/ tmp/ vendors/ views/ public_html/ admin/ app/ images/ ←画像ファイルを置くディレクトリ
要するに、
- adminプロジェクトで画像ファイルをアップロードさせる
- その画像をappプロジェクトで参照する
ということがしたい。
ちなみに、内部のファイルアップロード処理はthumbmake.phpを使用。
手順としては、
- _app_core/config/app.php を作成し、以下の内容を書く。
<?php define("IMAGE_UPLOAD_PATH", "/home/username/public_html/images"); define("IMAGE_UPLOAD_URL", "/~username/images"); ?>
- 各プロジェクト配下の config/core.php の末尾に1行追加する。
<?php ... require("../../_app_core/config/app.php"); ?>
- Controllerで
<?php ... // ファイル名は$file_nameに格納しているものとする $this->set("image_file", IMAGE_UPLOAD_URL.DS.$file_name); ... ?>
- Viewの方では、
<?php if (isset($image_file) && strlen($image_file) > 0) { ?> <img src="<?php e($image_file); ?>" /> <?php } ?>
と呼ぶことにする。
なんかもっとありそうなんだけどなあ。