スポンサードリンク
CakePHPを使って画像のアップロードをしてみました。
色々プラグインもありましたが、
取り合えず、普通にファイルアップしてみました。
スポンサードリンク
画像をアップするためのビューを作成
(例)Post/fileup.ctp
echo $this->Form->create('Post', array('type'=>'file', 'enctype' => 'multipart/form-data')); echo $this->Form->input('Post.image', array('label' => false, 'type' => 'file', 'multiple')); echo $this->Form->submit('登録する', array('name' => 'submit')); echo $this->Form->end();
画像をアップロードするために
1行目のcreateの部分でentypeでmultipart/form-dataを指定します。
次にファイルをアップするので
inputのtypeをfileとmultipleを指定します。
画像をアップするためのコントローラーを作成
(例)PostsController.php
public function fileup(){ if ($this->request->is('post') || $this->request->is('put')) { //画像の保存 if($this->Post->save($this->request->data)){ //画像保存先のパス $path = IMAGES; $image = $this->request->data['Post']['image']; $this->Session->setFlash('画像を登録しました'); move_uploaded_file($image['tmp_name'], $path . DS . $image['name']); }else{ $this->Session->setFlash('画像が登録できませんでした'); } } }
保存先は今回はwebrootのimgフォルダに指定しました。(6行目)
フォームから受け取った値を変数に入れ直します(7行目)
受け取った値は以下のように連想配列になっています。
$image['name'];// もとのファイル名 $image['type'];// ファイルのMIME型 $image['size'];// ファイルのサイズ。バイト単位。 $image['tmp_name'] // アップロードされたファイルの、テンポラリファイル名
move_uploaded_file関数で画像ファイルをwebrootのimgフォルダに移動させます。
スポンサードリンク
画像のバリデーション
(例)Post.php
//バリデーション public $validate = array( 'image'=>array( 'rule1' => array( //拡張子の指定 'rule' => array('extension',array('jpg','jpeg','gif','png')), 'message' => '画像ではありません。', 'allowEmpty' => true, ), 'rule2' => array( //画像サイズの制限 'rule' => array('fileSize', '<=', '500000'), 'message' => '画像サイズは500KB以下でお願いします', ) ), );
画像のバリデーションは簡単です。
コントローラーの説明で書いたように
フォームから受け取った値は連想配列に入ります。
後は普通のバリデーションと同じように
拡張子やファイルサイズをチェックするだけです。
連想配列で[‘name’]や[‘size’]の指定はしなくてもいいので
簡単にバリデーションを実装できます。
これで画像をアップロードして
webrootのimgフォルダにアップすることができました。
スポンサードリンク