在用户表单中,我有一个图片字段:
<?php echo $this->Form->file('Document.submittedfile', array('label' => __('Billede'))); ?>
我在控制器中进行了验证,但它不是最佳解决方案,因此我将其移至模型中,从那时起它就停止工作了。以下是该模型的验证片段:
'submittedfile'=>array(
'rule' => 'savePicture',
'message' => 'The image has to been in jpg, png, gif or pdf format and should not exceed 2MB')
public function savePicture($data){
if(!empty($data['Document']['submittedfile'])){
$file = $data['Document']['submittedfile'];
$folder_url = WWW_ROOT.'img/uploads/users/';
if(file_exists($folder_url . $file['name'])){
$now = date('Y-m-d-His');
$file['name'] = $now.$file['name'];
}
if($file['type'] == 'image/jpeg' || $file['type'] == 'image/png' || $file['type'] == 'image/gif' || $file['type'] == 'application/pdf' ){
if($file['size'] <= 2097152){
move_uploaded_file($file['tmp_name'], WWW_ROOT.'img/uploads/users/' . $file['name']);
$this->request->data['User']['image'] = $file['name'];
return true;
}else{
return false;
}
}else{
return false;
}
}else{
return false;
}
}
现在发生的是验证规则根本没有应用。
非常感谢任何帮助。
答案 0 :(得分:1)
savePicture($ data){}中的变量$ data将类似于下面的数组。相应地更改您的代码。
[submittedfile] => Array
(
[name] => sample_file
[type] => image/jpeg
[tmp_name] => /Applications/MAMP/tmp/php/phptU4UKh
[error] => 0
[size] => 132499
)
答案 1 :(得分:0)
除了你的问题,你的代码中还有很多事情做得不好。
关于您提出的问题:如果您想使用代码或使用完全经过单元测试的UploadValidator FileStorage plugin行为,请对代码进行单元测试。我不确定你的代码在哪里失败,我会把它分解成更多的方法(重复检查,扩展检查)和单元测试,你通常会发现错误。
您是否在验证规则中使用savePicture()作为验证方法,还是直接调用它?
https://github.com/burzum/FileStorage/blob/master/Model/Behavior/UploadValidatorBehavior.php