madiaプラグイン 応用(1) $fieldListチェックの設定
mediaプラグインの基本的な保存・表示周りを一通りできるようになりました。
「こんな事できないか」な課題はありますが、
多様な種類のファイルアップロードを一元的に扱えるのは魅力的。
設定などでカスタマイズできないか、検討してみます。
拡張が必要な物もありそうですが、
まずはmediaプラグインのオプション設定などで対応できる箇所から着手します。
手始めに、ファイルアップロード時の$fieldList設定のやり方を検討しました。
保管時の$fieldList設定
Attachment自身については、$fieldList設定の必要は無いようです。
attachmentsの各項目は、mediaビヘイビアのbeforeSave()内で、全てblackListあるいはwhiteListに指定して、不正POST処理を行なっています。
media/models/behavoirs/media.php
function beforeSave(&$Model) { (中略) $blacklist = array( 'dirname', 'basename', 'checksum', 'delete' ); $whitelist = array( 'id', 'file', 'model', 'foreign_key', 'created', 'modified', 'alternative' ); (中略) foreach ($Model->data[$Model->alias] as $key => $value) { if (in_array($key, $whitelist)) { continue; } if (in_array($key, $blacklist)) { unset($Model->data[$Model->alias][$key]); } }
ただ、上記の処理はあくまで「beforeSave」でチェックしてるだけなので、
save()あるいはsaveAll()で$fieldListを指定した場合は、別途Attachment向けの$fieldListの許可指定を出さなくてはなりません。
そしてsave()およびsaveAll()の$fieldList指定は、Attachment.*のようなワイルドカード指定を受け付けません。
in_array($x, $this->whitelist)
でマッチチェックしてますので・・・・
そもそもsaveAll()の場合は、{Model}.{項目}の書式で指定をすると、$fieldListチェックが通らず、保存できません*1。
コントローラで$fieldList指定する場合は、
まず、Attachmentの必要項目、idとcreated, modified以外は全て、一緒に指定しておく必要があります。
そして、Attachmentが紐づく親モデルの項目についてもfieldList指定します。
例
users_controller.php
+$fieldList = array( + // Attachment用 + 'model', + 'foreign_key', + 'dirname', + 'basename', + 'checksum', + 'group', + 'alternative', + // User用 + 'name', +); if ($this->User->saveAll($this->data, array( 'validate' => 'first', + 'fieldList' => $fieldList ))) {
親モデルでfield名が重複する場合は、unset()処理で対応でしょうか。
関連記事&残件リストアップ
保存
- $fieldListチェック
madiaプラグイン 応用(1) $fieldListチェックの設定 - 趣味の延長線
- アップロードファイル名の変更
mediaプラグイン応用(2) アップロードファイル名の変更 - 趣味の延長線
- アップロードファイルの種類・最大サイズチェック
mediaプラグイン応用(3) ファイルチェック - 趣味の延長線
- 複数アップロード禁止
mediaプラグイン応用(7) 複数アップロード禁止 - 趣味の延長線
- アップロードしたユーザの管理
表示
- 画像サイズ変更/altを設定/ID・classを指定/リンク付き画像 など
mediaプラグイン応用(6) Viewパーツの設定 - 趣味の延長線
- 画像設定がない場合、Noimage画像を出力
記載保留
- 縮小画像の設定変更
mediaプラグイン応用(5) 画像の出力設定 - 趣味の延長線
- アクセス時に縮小画像をfilterに出力
mediaプラグイン応用(4) Versionファイルを表示時に作成する - 趣味の延長線
- 出力ファイル形式を適宜設定
mediaプラグイン応用(8) VersionファイルのmimeTypeを任意で出力 - 趣味の延長線
-
- AnimationGIF出力(保留)
- 原画と同じ形式で縮小画像を作成
mediaプラグイン応用(9) 元のファイル形式を保持して縮小 - 趣味の延長線
- 原画と同じサイズの画像を表示
mediaプラグイン応用(10) 画像サイズを変更しない - 趣味の延長線
-
- Versionファイル化によるGIFAR対策
*1:これは、設計的に”正しい”仕様なのか…?