ファイルアップロードした画像の保存先ではまったのでメモ。
以下のアップロードプラグインを使う。
基本的には上記ページの
Using a Polymorphic Attachment Model for File Storage
に書かれている方法で、attachments というテーブルにファイル情報をまとめて保存して、以下のようなパスにファイルが保存されることを想定している。
webroot/files/image/attachment/47
このプラグインのデフォルトのファイル保存先パスは、
'{ROOT}webroot{DS}files{DS}{model}{DS}{field}{DS}'
だということになっている。これを見てROOTって、CakePHPのwebroot直下のindex.phpにあるROOTのことかと思ったら大間違い。
これはrootDirのことで、
ROOT . DS . APP_DIR . DS
なんだそうだ。
なので解凍したCakePHPをそのままの階層で使ってる場合はいいが、アプリケーション本体とwebroot以下を別のフォルダに設置した場合なんかは、全然パスが合わなくなってファイルが保存されなくなってしまう。
ということで、以下のようにしてみた。
class Attachment extends AppModel {
public $actsAs = array(
'Upload.Upload' => array(
'attachment' => array(
'rootDir' => WWW_ROOT,
'path' => 'files{DS}{model}{DS}{field}{DS}'
),
),
);