CakePHP2での複数ファイルのアップロードをしたい
お世話になります。
CakePHP2で画像のアップロード掲示板を作成していますが
複数ファイルアップロードについてどうすればできるのか悩んでいます。
※CakePHPの本も複数読んでいますが、複数ファイルをアップロードしたものがありません
--やったこと
まず最初に以下のような投稿フォームを作ろうとしました。
・タイトル(text)
・記事(textarea)
・画像1(file)
・画像2(file)
・画像3(file)
・画像4(file)
そのため、まず下記の2つのテーブルを作成しました。
CREATE TABLE `posts` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(30) NOT NULL,
`description` varchar(150) NOT NULL,
`user_id` int(11) NOT NULL,
`del_flg` tinyint(1) NOT NULL,
`created` datetime NOT NULL,
`modified` datetime NOT NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `images` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`post_id` int(11) NOT NULL,
`image` text NOT NULL,
`created` datetime NOT NULL,
`modified` datetime NOT NULL,
PRIMARY KEY (`id`)
)
Viewには下記のように書きました。
<?php echo $this->Form->create('Post', array('type' => 'file', 'action' => 'done')); ?>
<?php echo $this->Form->input('title', array('label' => false, 'type' => 'text')); ?>
<?php echo $this->Form->input('description', array('label' => false, 'type' => 'textarea')); ?>
<?php echo $this->Form->file('Post.Image.0.image'); ?>
<?php echo $this->Form->file('Post.Image.1.image'); ?>
<?php echo $this->Form->file('Post.Image.2.image'); ?>
<?php echo $this->Form->file('Post.Image.3.image'); ?>
<?php echo $this->Form->error('title'); ?>
<?php echo $this->Form->error('description'); ?>
<?php echo $this->Form->error('Post.Image.0.image'); ?>
<?php echo $this->Form->error('Post.Image.1.image'); ?>
<?php echo $this->Form->error('Post.Image.2.image'); ?>
<?php echo $this->Form->error('Post.Image.3.image'); ?>
<?php echo $this->Form->end('投稿する'); ?>
次にPostモデルと、Imageモデルを作りました。
--Post
<?php
class Post extends AppModel {
public $hasMany = array("Image");
public $validate = array(
'title' => array(
'maxLength' => array(
'rule' => array('maxLength', 30),
'required' => true,
'allowEmpty' => false,
),
),
'title' => array(
'maxLength' => array(
'rule' => array('maxLength', 150),
'required' => true,
),
),
);
}
?>
-- Image
<?php
class Image extends AppModel {
public $belongsTo = array('Post');
public $validate = array(
'image' => array(
'allowEmpty' => true,
'extension' => array(
'rule' => array('extension', array('gif', 'jpeg', 'png', 'jpg')),
'message' => '有効な画像ファイルを指定してください。',
),
'fileSize' => array(
'rule' => array('fileSize', '<=', '2MB'),
'message' => '画像は 2MB 未満でなければなりません。'
),
'uploadError' => array(
'rule' => 'uploadError',
'message' => 'ファイルアップロードで障害が起こりました。',
),
),
);
}
?>
-- PostsController
<?php
class PostsController extends AppController {
public function done() {
$user_id = $this->Auth->user("id");
$this->Post->set('user_id', $user_id);
if (!empty($this->request->data['id'])) {
// 追加
$this->Post->id = $this->request->data['id'];
$this->Post->save($this->request->data);
}else {
// 更新
$this->Post->save($this->request->data);
$post_id = $this->Post->getLastInsertID();
for ($i = 0; $i < 4; $i++) {
if (!$this->Image->save($this->request->data['Image'][$i])) {
return $this->render('form');
}
}
}
}
}
?>
付け加えると、以下の動作を望んでいます。
・ファイルは最低1つ必要
・指定された場合のファイルサイズは2M以下
・JPEG, GIF, PNGを選択可能。
上記のようにしたいのですが
実際は4つのファイル全てを選択しないと次の画面に進めない状況です。
またwordファイルをアップロードしても次に進めてしまいます。
どこが間違っているのでしょうか。
よろしくお願いします。