CakePHP 2.1,Ajax& Miles Johnsons Uploader插件

时间:2012-08-14 22:21:29

标签: ajax cakephp plugins uploader

我想通过$ 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.无法自动创建拇指并将其附加到模型的同一条目。

2 个答案:

答案 0 :(得分:2)

我已经回答了你的几个相关问题 - 我真的不想通过插件的配置设置(请联系开发者自己查询具体问题),所以我'我只是假设它们是正确的,因为你说它适用于静态文件提交。

  1. $ actAs表示行为参数;它们是在Model类上定义的,根据定义,它们永远不应该直接与视图通信。您仍然可以使用您的模型actAs,如果您愿意,您只能使用模型来操纵视图的行为。

  2. 这是 AJAX驱动的文件上传,对吗?因此,您可能需要编写一个简单的客户端脚本,以使用位于控制器操作的关联视图中的表单,将表单数据提交给蛋糕控制器方法是异步的。 - 请参阅:http://www.phpletter.com/Demo/AjaxFileUpload-Demo/

  3. 添加插件只允许插件为您处理模型,对吧?你确定需要2次调用插件吗?或2个控制器动作或2个控制器或2个模型或两者都使用该插件?

  4. 视图会将数据返回到控制器操作,这可能是您要将其发送到模型进行处理的位置。 beforeFilter()是控制器回调方法之一;特别是,在控制器中的任何/每个方法之前触发的那个(请参阅http://book.cakephp.org/2.0/en/controllers.htmlhttp://book.cakephp.org/2.0/en/views/json-and-xml-views.html来设置控制器以处理异步请求...)

  5. 缩略图生成是否应该在前端或后端征税? > _>如果是后者,您是否需要在模型中添加从数据生成缩略图的代码? Cake的魔术模型回调也应该非常简单:http://book.cakephp.org/2.0/en/models/callback-methods.html

  6. 以这种方式尝试至少应该为你简化一些事情。

    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));                                
        }
    }
}