1

我想通过 $actAs = 'Uploader.Attachment' 使用带有 CakePHP 2.1 的插件作为行为。虽然这适用于静态上传,但我不知道如何将它用于 ajaxUpload。

一个简单的问题:无论如何通过actAs-Behaviour 进行ajax-Upload 吗?

解释(如果需要):附件 Behavior 似乎没有任何默认值,也没有任何其他关于 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-Behaviour 来执行其他操作。2. 有两个不同的插件包含,我必须检查它们是否相同。3.不能自动创建拇指并将它们附加到模型的同一条目。

4

2 回答 2

2

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

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

  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

以这种方式尝试至少应该为您简化事情。

高温高压

于 2012-08-15T02:13:53.197 回答
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));                                
        }
    }
}
于 2012-08-15T11:32:44.970 回答