Mediaプラグインのver.1.2->1.3バージョンアップ
CakePHPをver.1.3にアップしたのに伴い、
1.2時代から導入+拡張コンポーネント入れて独自遣いしていた、Mediaプラグインも、1.3b*1にアップデートしました。
その際の、トラブル解消過程のメモです。
* 注
1.「独自拡張」由来の不具合が混ざっているかもしれません。
2.アップデートしながらのメモなので・・・ひょっとすると、現状ではメモ外での修正しなおし・解決済み項目あるかもしれません・・・
異論歓迎(^^;;)
ベースCakePHPの1.2->1.3バージョンアップにともない、
Mediaプラグイン自体のソースも0.6->1.3(β)に置き換え。
しかし、それだけではエラーがでる箇所がありました。
Mediaプラグイン1.3で、公式ドキュメントなどが行方不明になってるので苦労しましたが、
ダウンロードされないdocディレクトリに、多少情報がありました。
https://github.com/davidpersson/media/blob/1.3/docs/CHANGES-1.3x
この情報から、ver1.3バージョンアップに伴う、主な変更点。
- ヘルパー名が Medium から Media に変更
コントローラのヘルパー設定を変更。
var $helpers = array( - 'Media.Medium', + 'Media.Media',
view中の$medium(あるいはヘルパー中の$this->Medium)は、$media($this->Media)に書き換え、の二点が必須。
- Behavoirの構成変更
MediaBehavoirがなくなり、代わりに coupler, generator, metaの3つのBehavoirになっています。
それぞれの動作は概ね以下の通りなので、必要に応じてモデルの$actsAsに追加します。
-
- generator
Versionファイルの生成
-
- coupler
複数のAttachmentを生成
→ これを導入すると・・・saveAllなどで複数データをモデルを同時に保存している場合、file添付がないと、添付の無いデータは削除されるようになってしまいます!
-
- meta
ファイル種類などのチェック
また、TransferBehavoirも動作が少々変更されている様子。
拡張などでBehavoirをimportして使用している場合等は、変更が必要そうです。
私の場合、makeVersion()を、画像閲覧時に別個行う改修をしていたので、
これがMediaからGeneratorに移動になった箇所などを直しました。
- 設定の変更
上記URLでは「簡略化されました」のようにアッサリ書いてますが・・・
media/config/core.phpみると、結構、かなり変わってます。
ざっと見た限りでも、
-
- Mime_Type設定
- Versionファイル作成設定書式の変更
core.phpの設定参考に改修など入れてる場合、新core.phpの内容は確認必須です。
- その他
その他、上記URLで載ってなかった変更点など。
- attachmentsの内容変更
dirnameが transfer/img ->img になっている
- makeVersionsの設定
ファイルアップロードと同時にVersionファイルを作るか否かの設定、
Arrachmentモデルの
$this->actsAs['Media.Media']['makeVersions'] (デフォルトでtrue)
は、ver.1.3ではなくなったようです。
MediaBehavoirに
var $_defaultSettings = array(
'makeVersions' => true,
);
という設定がありますが、関係ないようです。
ソースを読んだ解釈の限り、
VersionファイルはGeneratorBehavoirのafterSave()〜make()で実行され、
ON/OFFの設定は、無いようです・・・。*2
- 保存ファイル名設定
旧版Mediaプラグインでは、保存するファイル名の規則を、Attachmentモデル内、
$this->actsAs['Media.Transfer']['destinationFile']
に設定できました。
しかしver.1.3にこの設定を入れると、
TransferBehavior::setup - The `destinationFile` settings has been removed in favor of the `transferTo()` callback. Implement the method in the `Attachment` model to get custom destination paths. [APP/plugins/media/models/behaviors/transfer.php, line 108]
というWarninigが出ます。
ハッキリしないのですが、ver1.3では、ファイル名規則の設定機能がなくなった様です。
基本的に元のファイル名と同じ名前でアップロード。
もし、同じファイル名で既にアップ済みの場合は、
元の名前_2以降の通し番号
に、なります。
元のファイル名ではなく独自の名称で保管したい場合、以下の参考サイトのように、TransferBehaboirのtransferTo()を改修するとよいようです。
CakePHP Media Plugin version 1.3, UUID filenames - Stack Overflow
-
- baseDirectory設定
Mediaプラグイン1.3βを導入すると、以下のNoticeがでます。
Notice (8): Undefined index: baseDirectory [APP/plugins/media/models/behaviors/media.php, line 97]
media.phpの97行目付近を見ると、Media.TransferのbaseDirectory設定がないためのエラーのようですが、
しかし、上記の変更点ドキュメントを見ると、「baseDirectory設はtransferDirectoryに変更された」とあります。
The @baseDirectory@ setting has been renamed to @transferDirectory@ to provide consistency and less confusion see http://github.com/davidpersson/media/issues#issue/28.
なお、上記で引用されているURLを見ると、attanchment.phpの$actAsで、Media.TransferのbaseDirectoryデフォルト値が設定されいるはずなのですが、
実際のソースでは、この箇所がbaseDirectoryになっています。
そして、Media.TransferのbaseDirectoryを設定すると、今度はWarningになります。
Warning (512): TransferBehavior::setup - The `baseDirectory` settings has been renamed to `transferDirectory`. [APP/plugins/media/models/behaviors/transfer.php, line 113]
以上のことから推測するに、
Mediaプラグインの方針としては、TransferBehaviorではtransferDirectory。
media.phpのこの箇所で、baseDirectoryが残ってしまっている方がミスなのではないかと思います。
暫定的に、改修しておきました。
APP/plugins/media/models/behaviors/media.php, line 97付近
/* Interact with Transfer Behavior */ if (isset($Model->Behaviors->Transfer)) { $transferSettings = $Model->Behaviors->Transfer->settings[$Model->alias]; // $config['baseDirectory'] = dirname($transferSettings['baseDirectory']) . DS; $config['transferDirectory'] = dirname($transferSettings['transferDirectory']) . DS; $config['createDirectory'] = $transferSettings['createDirectory']; }