【问题标题】:Declaration of Upload::beforeSave() should be compatible with Model::beforeSave($options = Array) [APP/Model/Upload.php, line 5]Upload::beforeSave() 的声明应该与 Model::beforeSave($options = Array) [APP/Model/Upload.php, line 5] 兼容
【发布时间】:2015-04-26 01:04:23
【问题描述】:

在上传模型中使用 beforeSave 方法时,我在页面顶部显示以下错误。

Strict (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();
    }

}

?>

【问题讨论】:

    标签: cakephp model cakephp-2.0


    【解决方案1】:

    只要改变这一行

    public function beforeSave() {
    

    到此,所以你有正确的方法声明

    public function beforeSave($options = array()) {
    

    【讨论】:

      【解决方案2】:

      beforeSave() 函数在模型数据成功验证后立即执行,但在数据保存之前。如果您希望保存操作继续,此函数也应该返回 true。

      对于需要在存储数据之前执行的任何数据消息处理逻辑,此回调特别方便。如果您的存储引擎需要特定格式的日期,请在 $this->data 中访问并修改它。

      下面是一个如何使用 beforeSave 进行日期转换的示例。示例中的代码用于数据库中的 begindate 格式为 YYYY-MM-DD 的应用程序,并在应用程序中显示为 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,否则您的保存将失败。

      【讨论】:

        猜你喜欢
        • 2014-09-28
        • 1970-01-01
        • 2023-03-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多