スポンサードリンク

CakePHP
CakePHP

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フォルダにアップすることができました。

スポンサードリンク