仕様
/users/upload/ にアップロードフォームを作る
DBテーブルを作ろう!
CREATE TABLE `yourprefix_attachments` ( `id` int(10) NOT NULL auto_increment, `model` varchar(255) NOT NULL default '', `foreign_key` int(10) NOT NULL default '0', `dirname` varchar(255) default NULL, `basename` varchar(255) NOT NULL default '', `checksum` varchar(255) NOT NULL default '', `group` varchar(255) default NULL, `alternative` varchar(50) default NULL, `created` datetime default NULL, `modified` datetime default NULL, PRIMARY KEY (`id`) ) TYPE=MyISAM AUTO_INCREMENT=7 ;
ファイルを設置しよう
1 https://github.com/davidpersson/media/downloads から mediaplugin 1.3beta をDLし、/plugins/media/に設置。
2 http://www.hideblog.net/nikkis/show/110/ を参考に日本語ファイルの文字化けを解消する
3 以下をbootstrap.phpへ追加
//media plugin require_once(APP.'plugins'.DS.'media'.DS.'config'.DS.'core.php');
ファイルを組み込もう
○ビュー (/users/upload/)
<h1>ユーザーと写真を追加</h1>
<?=$form->create(null,array('url' => $_SERVER['REQUEST_URI'] , 'type' => 'file'));?>
お名前
<?=$form->input('User.id',array('type' => 'hidden' , 'value' => $_SESSION['User']['id']));?>
<?=$form->input('name',array('type' => 'text'));?>
画像をアップロード<br />
<?=$form->input('Attachment.0.file',array('type' => 'file'));?>
<?=$form->input('Attachment.0.model',array('type' => 'hidden' , 'value' => $this->params['models'][0]));?>//User になる
<?=$form->input('Attachment.0.group',array('type' => 'hidden'));?>
<?=$form->input('Attachment.0.alternative',array('type' => 'hidden' , 'value' => 'User'));?>
<?=$form->end('submit');?>
ここまででアップロードフォームの作成が完了。続いて、アップロードされたものをどう保存するか。
○モデル User.php
class User extends AppModel {
var $hasMany = array(
'Attachment' => array(
'className' => 'Media.Attachment',
'foreignKey' => 'foreign_key',
'conditions' => array('model' => 'User'),
'dependent' => true,
)
);
}
○コントローラー (/users/upload/)
if($this->data){
if ($this->User->saveAll($this->data, array('validate' => 'first'))) {
echo '保存完了!';
} else {
echo '保存できません';
}
}
たったこれだけでファイルをアップロードできるようになる。
アソシエーションはその都度やりたいんだけど、動的bindmodelをやるとうまく保存できない。
だからモデルで最初にhasmanyしておく必要がある。
○バリデーション
/media/models/attachment.php の $validateの項目を編集して validateの内容を変更。
ただ、ファイルが空かどうかを調べるのができないので、これはコントローラー側で判断すべきか。



