在我的上传模式中使用beforeSave方法时,我的页面顶部出现以下错误。
严格(2048):上传:: beforeSave()声明应该是 兼容Model :: beforeSave($ options = Array) [APP / Model / Upload.php,第5行]
有人能指出我做错了吗?
这是我的模特:
<?php
App::uses('AppModel', 'Model');
class Upload extends AppModel {
protected function _processFile() {
$file = $this->data['Upload']['file'];
if ($file['error'] === UPLOAD_ERR_OK) {
$name = md5($file['name']);
$path = WWW_ROOT . 'files' . DS . $name;
if (is_uploaded_file($file['tmp_name'])
&& move_uploaded_file($file['tmp_name'], $path) ) {
$this->data['Upload']['name'] = $file['name'];
$this->data['Upload']['size'] = $file['size'];
$this->data['Upload']['mime'] = $file['type'];
$this->data['Upload']['path'] = '/files/' . $name;
unset($this->data['Upload']['file']);
return true;
}
}
return false;
}
public function beforeSave() {
if (!parent::beforeSave($options)) {
return false;
}
return $this->_processFile();
}
}
?>
答案 0 :(得分:11)
只需更改此行
即可public function beforeSave() {
这个,所以你有正确的方法声明
public function beforeSave($options = array()) {
答案 1 :(得分:2)
beforeSave()
函数在成功验证模型数据后立即执行,但在保存数据之前立即执行。如果要继续保存操作,此函数也应返回true。
对于在存储数据之前需要发生的任何数据按摩逻辑,此回调特别方便。如果您的存储引擎需要特定格式的日期,请访问$ this-&gt;数据并进行修改。
以下是如何将beforeSave用于日期转换的示例。示例中的代码用于数据库中格式为YYYY-MM-DD的begindate的应用程序,并在应用程序中显示为DD-MM-YYYY。当然,这可以很容易地改变。在相应的模型中使用以下代码。
public function beforeSave($options = array()) {
if (!empty($this->data['Event']['begindate']) &&
!empty($this->data['Event']['enddate'])
) {
$this->data['Event']['begindate'] = $this->dateFormatBeforeSave(
$this->data['Event']['begindate']
);
$this->data['Event']['enddate'] = $this->dateFormatBeforeSave(
$this->data['Event']['enddate']
);
}
return true;
}
public function dateFormatBeforeSave($dateString) {
return date('Y-m-d', strtotime($dateString));
}
确保beforeSave()返回true,否则您的保存将失败。