附加插件
附加插件是 CakePHP 2 中的简单上传工具。在几个项目中,我使用过 MeioUpload 插件,它对我来说非常好用,但对于一些新项目,我想为我的附件使用多态模型,以及新的、优秀的 Imagine 库来生成缩略图和操作图像。因此,我决定开发一个名为 Attach 的插件。使用起来非常简单
安装
- 从 github 克隆:在你的应用程序目录中输入 git clone git@github.com:krolow/Attach.git Plugin/Attach
- 添加为 git 子模块:在你的应用程序目录中输入 git submodule add git@github.com:krolow/Attach.git Plugin/Attach
- 从 github 下载存档并解压到 app/Plugin/Attach https://github.com/krolow/Attach/downloads
- 如果你需要缩略图来生成图像,请从这里下载最新版本的 Imagine.phar: https://github.com/avalanche123/Imagine/blob/develop/imagine.phar
使用方法
在需要上传的模型中,将类声明替换为类似以下内容
重要的是要记住,你的模型类可以有自己的字段,并且它将与 Attachment 模型建立额外的关系,包含用于上传的字段。
App::uses('AppModel', 'Model');
class Media extends AppModel {
public $validate = array(
'image' => array(
'extension' => array(
'rule' => array(
'extension', array(
'jpg',
'jpeg',
'bmp',
'gif',
'png',
'jpg'
)
),
'message' => 'File extension is not supported',
'on' => 'create'
),
'mime' => array(
'rule' => array('mime', array(
'image/jpeg',
'image/pjpeg',
'image/bmp',
'image/x-ms-bmp',
'image/gif',
'image/png'
)),
'on' => 'create'
),
'size' => array(
'rule' => array('size', 2097152),
'on' => 'create'
)
),
'swf' => array(
'extension' => array(
'rule' => array(
'extension', array(
'swf',
)
),
'message' => 'File extension is not supported',
'on' => 'create'
),
'mime' => array(
'rule' => array('mime', array(
'application/x-shockwave-flash',
)),
'on' => 'create'
),
'size' => array(
'rule' => array('size', 53687091200),
'on' => 'create'
)
),
'zip' => array(
'extension' => array(
'rule' => array(
'extension', array(
'zip',
)
),
'message' => 'File extension is not supported',
'on' => 'create'
),
'mime' => array(
'rule' => array('mime', array(
'application/zip',
'multipart/x-zip'
)),
'on' => 'create'
),
'size' => array(
'rule' => array('size', 53687091200),
'on' => 'create'
)
),
);
public $actsAs = array(
'Attach.Upload' => array(
'swf' => array(
'dir' => 'webroot{DS}uploads{DS}media{DS}swf'
),
'image' => array(
'dir' => 'webroot{DS}uploads{DS}media{DS}image',
'thumbs' => array(
'thumb' => array(
'w' => 190,
'h' => 158,
'crop' => true,
),
),
),
'zip' => array(
'dir' => 'webroot{DS}uploads{DS}media{DS}zip'
),
),
);
你还需要在你的数据库中指定字段,如下所示
CREATE TABLE `attachments` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`filename` varchar(150) NOT NULL,
`model` varchar(150) NOT NULL,
`foreign_key` int(11) NOT NULL,
`type` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
创建你的上传视图,确保它是一个 multipart/form-data 表单,并且文件名字段类型为 'file'
echo $this->Form->create('Media', array('type' => 'file'));
echo $this->Form->input('name');
echo $this->Form->input('image', array('type' => 'file'));
echo $this->Form->input('swf', array('type' => 'file'));
echo $this->Form->input('zip', array('type' => 'file'));
echo $this->Form->input('status');
echo $this->Form->end(__('Submit'));
Attach 会为你自动创建与 Attachment 模型的关系,对于你定义的每种类型。
var_dump($this->Media->AttachmentImage);
var_dump($this->Media->AttachmentSwf);
var_dump($this->Media->AttachmentZip);
它将始终是“Attachment”加上类型!所以,Attach 插件将处理你的文件,你可以在 github 上关注插件的最新更新: https://github.com/krolow/Attach