Upload :: beforeSave()声明应该与Model :: beforeSave兼容($ options = Array)[APP / Model / Upload.php,第5行]

时间:2015-04-26 01:04:23

标签: cakephp model cakephp-2.0

在我的上传模式中使用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();
    }

}

?>

2 个答案:

答案 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,否则您的保存将失败。