複数プロジェクトから同じ画像を参照する

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/  ←画像ファイルを置くディレクトリ

要するに、

  1. adminプロジェクトで画像ファイルをアップロードさせる
  2. その画像を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 } ?>

と呼ぶことにする。


なんかもっとありそうなんだけどなあ。