この記事を読むのに必要な時間は約 15 分です。
CakePHP で、画像のアップロードやサムネイル作成までを簡単に行える、Upload プラグインについて、使い方をご紹介したいと思います。
今回は、Behavior の設定について、解説したいと思います。
[pn-box color=”lgray”]Upload プラグインの動作の解説等は以下をご覧下さい。
→ CakePHP Upload プラグインの動作解説 : 画像のアップロードからサムネイル作成まで手軽にできる CakePHP Uploadプラグイン
導入方法や DB 変更、Model の変更・作成については以下をご覧下さい。
→ CakePHP Upload プラグインの使い方 (1) 導入・DB, Model 変更
View や Controller の修正については、以下をご覧下さい。
→ CakePHP Upload プラグインの使い方 (2) View や Controller の修正
公式ドキュメント
当記事は、GitHub 上の公式ドキュメント (英語) を参考に、日本語で解説したものになります。
最新の情報、および記載を省略した内容については、リンク先をご覧下さい。
どこで設定するか
設定を行うのは、Model に Behavior を登録する箇所になります。
以下のように、カラム名毎に設定することができます。
public $actsAs = array( "Upload.Upload" => array( "カラム名" => array( "オプション1" => "値1", "オプション2" => "値2", ... ), ), );
[pn-box color=”lgray”]
コード例としては、前々回の記事をご覧下さい。
[pn-box-close]
アップロードファイルについての設定
path : アップロードファイル配置ベースディレクトリ
書式とデフォルト値
"path" => "{ROOT}webroot{DS}files{DS}{model}{DS}{field}{DS}"
解説
アップロードファイルを配置する際のベースとなるディレクトリの指定です。
1レコード毎に、pathMethod オプションで指定されたルールに従ったディレクトリを、ベースとなるディレクトリ直下に作成し、アップロードされたファイルを配置します。
例えば、<path ディレクトリ>/1/IMAGE01.jpg、<path ディレクトリ>/2/IMAGE02.jpg … といった具合になります。
設定しうる値
任意のディレクトリパスを指定可能です。ただし、{DS} で終わる必要があります。
以下の Token を利用できます。
- {ROOT} : app ディレクトリまでのフルパスを指します。オプション rootDir を変更すると変わります。
- {DS} : Directory Separator。Linux・Unix・Mac 系なら “/”、Windows 系なら “¥” に置き換わります。
- {model} : モデルのエイリアス (別名) に置き換わります。
- {field} : Behavior が設定されるカラム名に置き換わります。
選び方
好みで選んで良いかと思います。
{model} や {field} がデフォルトで含まれているのは、複数の Model や カラムで使われる場合に重複しないように、という配慮だと思われます。よって、新規テーブルで画像一括管理をするような場合には、{model} や {field} は不要かと思います。
rootDir : Behavior で扱うトップディレクトリ
書式とデフォルト値
"rootDir" => ROOT . DS . APP_DIR . DS
解説
path 設定や、thumbnailPath 設定で利用する {ROOT} Token の内容を指定します。変更すると、両者に影響します。
設定しうる値
任意のディレクトリパスを指定可能です。
選び方
そうそう変える必要はないかと思います。
CakePHP の app ディレクトリ配下でないディレクトリに配置したい場合などでしょうか。あとは、アップロードファイル用の path も サムネイルファイル用の thumbnailPath も、特定のディレクトリ配下に配置したいような場合に、それぞれに設定する手間を省くことができます。
pathMethod : 作成ディレクトリ命名ルール
書式とデフォルト値
"pathMethod" => "primaryKey"
設定しうる値
- “flat” : ディレクトリを生成しません。
- “primaryKey” : 該当の record の PK をディレクトリ名にします。
- “random” : “nn/nn/nn” 2桁 3つのランダムな数字を生成します。レコードを Update する (再アップロードする) 時には、異なる値になります。
- “randomCombined” : “id/nn/nn/nn” という Model の id と random 生成文字列とを結合した形式になります。
選び方
通常は、”primaryKey” にしておけば、重複することもなく管理しやすいかと思います。
id を知られたくないようであれば、 “random” を選ぶと良いかと思います。”flat” を選ぶ場合は、ファイル名の重複などを回避する何らかの運用ルールが必要になるかと思います。
サムネイル作成についての設定
thumbnailMethod : サムネイル作成方法
書式とデフォルト値
"thumbnailMethod" => "imagick"
設定しうる値
- “imagick” : PHP Imagick 拡張を利用します。
- “php” : PHP GD 拡張を利用します。BMP ファイルは非サポートになります。
選び方
サーバーの環境で、利用可能な方を選べば OK です。
thumbnailSizes : 作成するサムネイルサイズの指定
書式
"thumbnailSizes" => array( "プレフィックス01" => "サイズ指定01", "プレフィックス02" => "サイズ指定02", )
プレフィックス部分解説
プレフィックス部分が、作成されるサムネイルのファイル名の頭に付与されます。
プレフィックス + “_” + オリジナルファイル名が、サムネイルのファイル名です。
上記書式の例で、IMAGE01.jpg というファイルをアップロードすると、以下の 2 つのファイルが生成されます。
- プレフィックス01_IMAGE01.jpg (サイズ : “サイズ指定01”)
- プレフィックス02_IMAGE01.jpg (サイズ : “サイズ指定02”)
設定しうる値 (サイズ指定部分)
以下の数値部分 (100, 80) は任意の値を指定可能です。説明のために仮置きしています。
- “100×80”
- 必ず 幅 100px / 高さ 80px の画像になります。
- 可能な限りフィットするように拡大/縮小し (*1) 、縦横比の違いにより余った部分は捨てます。
- *1 : 元画像の短い方を合わせるよう拡大/縮小します。
- “[100×80]”
- 必ず 幅 100px / 高さ 80px の画像になります。
- 可能な限りフィットするように拡大/縮小し (*2)、縦横比の違いにより余る部分はホワイトで埋めます。
- *2 : 元画像の長い方を合わせるよう拡大/縮小します。
- “100w”
- 幅 100px の画像になります。高さは、元の縦横比に合わせて変わります。
- 幅 100px に合うように拡大/縮小します。
- “80h”
- 高さ 80px の画像になります。幅は、元の縦横比に合わせて変わります。
- 高さ 80px に合うように拡大/縮小します。
- “100l” ( ← 100エル小文字です )
- 長辺が 100px の画像になります。短辺は 100px 以下になります。
- 長辺が 100px になるように拡大/縮小します。
- “100mw”
- 幅 100px もしくは、幅 100px 以下の画像になります。高さは、元の縦横比により変わります。
- 幅 100px になるように縮小します。拡大はしません。元の画像が幅 100px 以下の場合は、元画像がそのままコピーされます。
- “80mh”
- 高さ 80px もしくは、高さ 80px 以下の画像になります。幅は、元の縦横比により変わります
- 高さ 80px になるように縮小します。拡大はしません。元の画像が高さ 80px の場合は、元画像がそのままコピーされます
- “100ml”
- 長辺が 100px もしくは、100px 以下の画像になります。短辺は 100px 以下になります。
- 長辺が 100px になるように縮小します。拡大はしません。元の画像が長辺 100px 以下の場合は、元画像がそのままコピーされます。
デフォルト値
なし
選び方
どんな画像が欲しいか次第ですが、拡大されない ml とかの辺りが使いやすいかも知れません。
[pn-box color=”lgray”]thumbnailSizes については、公式ドキュメントがこちらになります。
[pn-box-close]
thumbnailPath : サムネイルファイル配置ベースディレクトリ
書式とデフォルト値
"thumbnailPath" => null
解説
アップロードされたオリジナルファイルとは別なディレクトリに、サムネイルファイルを配置することができます。
null の場合は、オリジナルファイルと同じディレクトリにサムネイルファイルが生成されます。
設定しうる値
任意のディレクトリパスを利用することができます。
以下の Token を利用することができます。
- {ROOT} : app ディレクトリまでのフルパスを指します。オプション rootDir を変更すると変わります。
- {DS} : Directory Separator。Linux・Unix・Mac 系なら “/”、Windows 系なら “¥” に置き換わります。
- {model} : モデルのエイリアス (別名) に置き換わります。
- {field} : Behavior が設定されるカラム名に置き換わります。
- {size} : thumbnailSize で指定されたプレフィックスに置き換わります。
- {geometry} : thumbnailSize で指定されたサイズ (“100×80″など) に置き換わります。
選び方
通常であれば、デフォルトのまま、オリジナルファイルと同じディレクトリでも困ることは無いかと思います。サムネイルは分けたいという方は指定すれば良いかと思います。
ひとこと
Upload Behavior の設定は、他にも多くの設定があります。英語になりますが、公式ドキュメントにて、ざっとどんなものがあるかだけでも、見てみると良いかと思います。
個人的に気になったのは、nameCallback です。オリジナルのファイル名を変更することができるようになりそうです。
時間ができたら、それら他のオプションについても調べてみたいと思います。
[pn-box color=”lgray”]次の記事は、以下になります。良かったら以下もご覧下さい。
しっかり理解する CakePHP Upload プラグインの使い方 (4) うまく動かない時にはこれをチェック!
また、アップロードされたオリジナルファイル名を変更する方法を以下の記事で解説しました。
しっかり理解する CakePHP Upload プラグインの使い方 (5) アップロードされたファイルをリネームする方法
今回は以上です。
[pn-amzn-cakephp]