我想通过$ actAs ='Uploader.Attachment'将插件与CakePHP 2.1一起使用。虽然这适用于静态上传,但我不知道如何将它用于ajaxUploads。
简单问题: 无论如何通过actAs-Behavior进行ajax-Upload?
解释(如果需要): 附件行为似乎没有任何默认值,也没有关于ajax的任何其他代码(尤其不是以下代码中的ajaxField)。虽然如果我通过
包含插件,它可以工作public function beforeFilter() {
$this->Uploader = new Uploader(array(
'ajaxField' => 'qqfile'
));
}
所以我可以使用类似的东西:
$data = $this->Uploader->upload($this->Uploader->ajaxField, array('overwrite' => true));
但不是:
$this->request->data;
就像我一样,这并不是我所追求的 1.仍然需要actAs-Behavior用于其他操作。 2.有两个不同的插件包含,我必须检查它们是否也这样做。 3.无法自动创建拇指并将其附加到模型的同一条目。
答案 0 :(得分:2)
我已经回答了你的几个相关问题 - 我真的不想通过插件的配置设置(请联系开发者自己查询具体问题),所以我'我只是假设它们是正确的,因为你说它适用于静态文件提交。
$ actAs表示行为参数;它们是在Model类上定义的,根据定义,它们永远不应该直接与视图通信。您仍然可以使用您的模型actAs,如果您愿意,您只能使用模型来操纵视图的行为。
这是 AJAX驱动的文件上传,对吗?因此,您可能需要编写一个简单的客户端脚本,以使用位于控制器操作的关联视图中的表单,将表单数据提交给蛋糕控制器方法是异步的。 - 请参阅:http://www.phpletter.com/Demo/AjaxFileUpload-Demo/
添加插件只允许插件为您处理模型,对吧?你确定需要2次调用插件吗?或2个控制器动作或2个控制器或2个模型或两者都使用该插件?
视图会将数据返回到控制器操作,这可能是您要将其发送到模型进行处理的位置。 beforeFilter()
是控制器回调方法之一;特别是,在控制器中的任何/每个方法之前触发的那个(请参阅http://book.cakephp.org/2.0/en/controllers.html和http://book.cakephp.org/2.0/en/views/json-and-xml-views.html来设置控制器以处理异步请求...)
缩略图生成是否应该在前端或后端征税? > _>如果是后者,您是否需要在模型中添加从数据生成缩略图的代码? Cake的魔术模型回调也应该非常简单:http://book.cakephp.org/2.0/en/models/callback-methods.html
以这种方式尝试至少应该为你简化一些事情。
HTH
答案 1 :(得分:0)
这就是我现在针对具体案例所做的事情。也许它有助于某人。不漂亮,但它有效:
public function beforeFilter() {
$this->Uploader = new Uploader(array(
'ajaxField' => 'qqfile'
));
}
public function ajax() {
$this->set('title_for_layout', 'Upload: AJAX File Upload');
$this->render('ajax');
}
public function ajax_upload($album_id = null, $album_title = null) {
$this->set('album_id', $album_id);
$this->set('album_title', $album_title);
$album_id = 2;
$upload_dir = "uploads/$album_id/";
$this->autoLayout = $this->autoRender = false;
$this->Uploader->setup(array('uploadDir' => "$upload_dir"));
$data = $this->Uploader->upload($this->Uploader->ajaxField, array(
'overwrite' => true,
'name' => 'uploaderFilename'
));
//Creating a thumb
$thumb_name = $data['custom_name']."_thumb.".$data['ext'];
$this->Uploader->resize(array('width' => 250, 'expand' => true, 'aspect' => true, 'append' => '_thumb'));
if (!empty($data)) {
$this->Picture->set($data);
if ($this->Picture->validates()) {
// Upload successful
$data["album_id"]= $album_id;
$data['path_thumb'] = $upload_dir.$thumb_name;
$this->Picture->save($data);
header('Content-Type: application/json');
echo json_encode(array('success' => true, 'data' => $data));
}
}
}