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()処理で対応でしょうか。

関連記事&残件リストアップ

表示
  1. 画像サイズ変更/altを設定/ID・classを指定/リンク付き画像 など

  mediaプラグイン応用(6) Viewパーツの設定 - 趣味の延長線

  1. 画像設定がない場合、Noimage画像を出力

  記載保留

  1. 縮小画像の設定変更

  mediaプラグイン応用(5) 画像の出力設定 - 趣味の延長線

  1. アクセス時に縮小画像をfilterに出力

  mediaプラグイン応用(4) Versionファイルを表示時に作成する - 趣味の延長線

  1. 出力ファイル形式を適宜設定

  mediaプラグイン応用(8) VersionファイルのmimeTypeを任意で出力 - 趣味の延長線

    1. AnimationGIF出力(保留)
  1. 原画と同じ形式で縮小画像を作成

  mediaプラグイン応用(9) 元のファイル形式を保持して縮小 - 趣味の延長線

  1. 原画と同じサイズの画像を表示

  mediaプラグイン応用(10) 画像サイズを変更しない - 趣味の延長線

    1. Versionファイル化によるGIFAR対策

    mediaプラグインのGIFAR対策 - 趣味の延長線

*1:これは、設計的に”正しい”仕様なのか…?