cakephp2.x 画像アップロード 世界一簡単な方法

2013年4月8日更新 view: 154 view
photoBy: http://www.c-direct.jp/demo/mypage/images/img-03-01.png

cakephp2.x で画像をアップロードするには

今までは

  • mediaplugin
  • filebinder

などがあったが、さらに新しいものがあるので、それを使う。

その名も upload

特徴としては

  • サムネイルを作れる
  • PDF等もいける

早速使ってみよう

ファイルの準備

https://github.com/josegonzalez/upload

からダウンロードし、

  • /Plugin/Upload/ に保存
  • bootstrap.php に CakePlugin::load('Upload'); と記述

今回の条件

  • Userモデルに Attachment モデルを hasMany
  • アップロードされた画像は Attachment モデルに保存される。
  • 画像の読み出しは hasMany なので一気に読み出せる

テーブルの用意

CREATE TABLE IF NOT EXISTS `table_attachments` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`photo` text NOT NULL,
`model` varchar(20) NOT NULL,
`foreign_key` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=ujis COMMENT='upload プラグイン' AUTO_INCREMENT=15 ;

使い方

スポンサードリンク

/Model/Attachment.php

<?php
class Attachment extends AppModel {
    public $actsAs = array(
        'Upload.Upload' => array(
            'photo'
        )
    );
}

ようは、Attachment モデル で アップロードプラグインを使いますよと。

/Model/User.php

<?
    class User extends AppModel {
        public $hasMany = array(
            'Attachment'
        );
    }
?>

User モデル 1 に対して、 Attachment を複数にしますよと。
ようは一人のユーザーが複数の画像をアップロードできるようにする。

続いてアクションとビューを作るよ

/Controller/UsersController.php

function upload()
{
    if($this->request->data){
        if($this->User->saveAll($this->request->data)){
            echo 'ok';
        }
    }
}

/View/Users/upload.ctp

<?php echo $this->Form->create('User', array('type' => 'file')); ?>
<?php echo $this->Form->input('User.username'); ?>
<?php echo $this->Form->input('Attachment.0.photo', array('type' => 'file')); ?>
<?php echo $this->Form->submit('Send');?>
<?php echo $this->Form->end(); ?>

これでアップロードすればアップロードができます。

その他のオプションと注意点

/Model/Attachment.php

<?php
class Attachment extends AppModel {

    public $actsAs = array(
        'Upload.Upload' => array(
            'file' => array(
                'thumbnailSizes' => array(
                    'thumb150' => '150x150',
                    'thumb80' => '80x80',
                ),
                'thumbnailMethod' => 'php',//GDでサムネイル作成
                'mimetypes' => array('image/jpeg', 'image/gif', 'image/png'),//許可するmimetype
                'extensions' => array('jpg', 'jpeg', 'JPG', 'JPEG', 'gif', 'GIF', 'png', 'PNG'),//許可する画像の拡張子
                'maxSize' => 2097152, //許可する画像のサイズ 2MB
            )
        )
    );

}

以下、Uploadの仕様

  • 画像は /app/webroot/files 内に作られる
  • photo_dir つまり 画像が保存されるフォルダ名は Attachment の primary に固定される
スポンサードリンク

関連記事

関連カテゴリ