CakePHP 上传插件 - 行为设置

Posted

技术标签:

【中文标题】CakePHP 上传插件 - 行为设置【英文标题】:CakePHP Uploader Plugin - Behavior Setup 【发布时间】:2012-10-07 01:33:51 【问题描述】:

我正在使用这个插件:MileJ Cakephp Uploader,它工作得非常好,但是我只能让它通过控制器工作,而不是作为我需要工作的模型中的一种行为,所以我可以使用该功能来传递文件到 Amazon s3。

我的代码如下,谁能看出我哪里出错了?目前数据库记录已生成,但仅与我在表单上的其他字段(标题,card_id,user_id)无关,但与文件无关。文件也没有上传。

模型:DataFile.php

public $actsAs = array(
    'Uploader.FileValidation' => array(
        'file1' => array(
            'required' => true
        ),
        'file2' => array(
            'required' => false
        ),
        'file3' => array(
            'required' => true
        )
    ),
    'Uploader.Attachment' => array(
        'file' => array(
            'name' => '',
            'uploadDir' => 'files/data_files/',
            'dbColumn' => 'path',
            'maxNameLength' => 30,
            'overwrite' => true,
            'stopSave' => false,
            's3'        => array(
                                'accessKey' => 'MYACCESSKEY',
                                'secretKey' => 'MYSECRETKEY',
                                'ssl' => true,
                                'bucket' => 'testfilespath',
                                'path' => '/'
                            ),                  // Array of Amazon S3 settings              
            'metaColumns' => array(
                    'ext' => 'extension',
                    'size' => 'bytesize',
                    'group' => 'group',
                    'width' => 'width',
                    'height' => 'height',
                    'filesize' => 'filesize'
            )
        )
    )
);  

控制器:DataFileController.php

// ADD BY BEHAVIOUR NEW FILE(S) - NOT WORKING
// ---------------------------------------------------------->
function add_behavior() 

    if (!empty($this->request->data)) 
    

        if ($this->DataFile->save($this->request->data)) 
        
            debug($this->request->data);

            $this->Session->setFlash(__('The File has been uploaded');
            $this->redirect(array('action' => 'index'));
         
        else 
        
            $this->Session->setFlash(__('The DataFile could not be saved. Please, try again.'));
        
    

查看:add_behavior.ctp

<?php echo $this->Form->create('DataFile', array('type' => 'file')); ?>
    <?php
    echo $this->Form->input('user_id', array('value' => $this->Session->read("Auth.User.id"),  'type' => 'text'));
    echo $this->Form->input('card_id', array('value' => '1',  'type' => 'text'));
    echo $this->Form->input('caption', array('label' => 'File Title'));
    echo $this->Form->input('file1', array('type' => 'file', 'label' => 'File'));
    ?>
    <?php echo $this->Form->end(__('Upload'));?>

【问题讨论】:

【参考方案1】:
Uploader.Attachment => array(
        'file1' => array(...),
        'file2' => array(...),
        'file3' => array(...),
);

使用该行为时,您必须在 Uploader.Attachment 数组中指定文件字段的名称。

您的表单字段名为file1,当前行为正在寻找file

【讨论】:

我刚开始使用这个插件时也犯了同样的错误!我认为在我个人看来,文档在某些地方有点不清楚。这是一个不错的插件。

以上是关于CakePHP 上传插件 - 行为设置的主要内容,如果未能解决你的问题,请参考以下文章

cakephp 2 上的自动完成 Ajax

没有任何数据库表的CakePHP模型或控制器

Cakephp中的AJAX文件输入图片上传

CakePHP 3 - 奇怪的行为 $this->set();设置后受影响

cakephp上传组件教程

CakePHP 3 编辑上传