首先,感谢迈尔斯·约翰逊(Miles Johnson)制作了一个很棒的插件,用于上传到cakephp但是我有一些问题我想使用 beforeupload() 函数在我的模型中设置 uploaddir但它没有在我的附件中添加数组的数据它覆盖了我所有的附件上传器配置这是我的模型
class File extends AppModel {
public $actsAs = array(
'Uploader.Attachment' => array(
'fileupload' => array(
'maxNameLength' => 255,
'overwrite' => true,
'stopSave' => true,
'allowEmpty' => false,
'dbColumn' => 'path_file',
'prepend' => '',
'uploadDir' => '',
'finalPath' =>''
)
)
);
public function beforeUpload()
{
$folderid = $this->data['File']['folder_id'];
foreach($this->folder_path($folderid) as $row)
{
$folder = trim($row[0]['folder']);
$subfolder = trim($row[0]['subfolder']);
}
$options['prepend'] = Configure::read('dept_sess') . Configure::read('timeunique')."==";
$options['uploadDir'] = 'files/' . Configure::read('dept_sess') . '/' .$folder. '/' .$subfolder. "/";
return $options;
}
}
假设我的控制器和$this->folder_path是正确的,当我在控制器上执行 save() 时它给出了一个错误$attachment的调试结果
array(
'prepend' => '0000010820131030174740==',
'uploadDir' => 'files/00000108/folder/subfolder/'
)
我的$attachment配置被重写,并且没有添加附件数组的数据。为什么我的 beforeUpload() 函数无法在附件数组上添加数据?对于最糟糕的解决方案,我只是在 beforeupload() 上添加所有附件数据,例如:
public $actsAs = array(
'Uploader.Attachment' => array(
'fileupload' => array()));
public function beforeUpload()
{
$folderid = $this->data['File']['folder_id'];
foreach($this->folder_path($folderid) as $row)
{
$folder = trim($row[0]['folder']);
$subfolder = trim($row[0]['subfolder']);
}
$options['name'] = Configure::read('dept_sess') . Configure::read('timeunique')."==";
$options['baseDir'] = 'files/' . Configure::read('dept_sess') . '/' .$folder. '/' .$subfolder. "/";
$options['uploadDir'] = 'files/' . Configure::read('dept_sess') . '/' .$folder. '/' .$subfolder. "/";
$options['append'] = '';
$options['overwrite '] = false;
$options['prepend'] = Configure::read('dept_sess') . Configure::read('timeunique')."==";
$options['dbColumn'] = 'file_path';
$options['importFrom'] = '';
$options['defaultPath'] = '';
$options['maxNameLength'] = '';
$options['stopSave'] = '';
$options['allowEmpty'] = false;
$options['saveAsFilename'] = '';
$options['transforms'] = '';
$options['s3']['host'] = '*****';
$options['s3']['format'] = 'http://{host}/{bucket}/{path}';
$options['s3']['accessKey'] = '';
$options['s3']['secretKey'] = '';
$options['s3']['ssl'] = '';
$options['s3']['bucket'] = '';
$options['s3']['path'] = '';
$options['metaColumns']['ext'] = '';
$options['metaColumns']['type'] = '';
$options['metaColumns']['size'] = '';
$options['metaColumns']['group'] = '';
$options['metaColumns']['width'] = '';
$options['metaColumns']['height'] = '';
$options['metaColumns']['filesize'] = '';
$options['finalPath'] = '';
$options['field'] = '';
return $options;
}
我想为我的代码避免这种方式,任何人都可以给出解决方案吗?对不起,我的英语不好
您需要
在beforeUpload()
中接收$options
,以便对其进行修改。由于您没有这样做,因此您只是创建一个新数组,其中仅包含您在函数中设置的选项。
public function beforeUpload($options)
{
$folderid = $this->data['File']['folder_id'];
foreach($this->folder_path($folderid) as $row) {
$folder = trim($row[0]['folder']);
$subfolder = trim($row[0]['subfolder']);
}
$options['prepend'] = Configure::read('dept_sess') . Configure::read('timeunique')."==";
$options['uploadDir'] = 'files/' . Configure::read('dept_sess') . '/' .$folder. '/' .$subfolder. "/";
return $options;
}
您可以看到$options
已在此处传递给它 https://github.com/milesj/uploader/blob/master/Model/Behavior/AttachmentBehavior.php#L516