我在我的 CakePHP 应用程序中创建了一个简单的模型行为来处理文件上传。在其beforeValidate()
方法中,我有以下内容:
public function beforeValidate(Model $Model, $options = array()) {
$maxFileSize = '1MB';
$Model->validator()->add($this->settings[$Model->alias]['field'], array(
'extension' => array(
'rule' => array('extension', $this->settings[$Model->alias]['allowedExtensions']),
'message' => __('Please supply a valid image'),
'allowEmpty' => ($this->settings[$Model->alias]['required'] === false)
),
'fileSize' => array(
'rule' => array('fileSize', '<=', $maxFileSize),
'message' => __('Image must be less than %s', $maxFileSize)
),
'uploadError' => array(
'rule' => 'uploadError',
'message' => __('Something went wrong with the upload')
)
));
return true;
}
我正在动态添加与文件字段相关的验证。第一条规则是检查扩展名是否在行为设置中传递的允许的扩展名数组中,并且我有一个allowEmpty
等同于的键,true
因为在这种情况下文件上传不是强制性的。
此行为附加到一个Event
类。编辑事件时,扩展验证规则会启动,即使我已指定allowEmpty
为true
. 为什么是这样?
是不是因为文件字段中传递的数据是一个数组并且实际上等同于非空,因此验证正在启动?如果是这样,我该如何对抗?如果文件实际已上传,我只想进行验证。