2015-04-26 30 views
5

Şu anda sayfamın üstünde aşağıdaki hatayı gösteriyorum Yükleme modelimde beforeSave yöntemini kullanarak.

Sıkı (2048): yükle :: BeforeSave Beyanı() Model :: BeforeSave uyumlu olmalıdır ($ seçenekler = Array) [APP/Model/upload.php, hat 5]

Birisi neyi yanlış yaptığımı işaret edebilir mi?

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

} 

?> 

cevap

11

Sadece bu çizgiyi bu kadar

public function beforeSave() { 

değiştirmek

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

beforeSave() fonksiyon modeli verileri başarıyla doğrulandı hemen sonra çalıştırır, ancak veri kaydedilir hemen önce:

İşte benim modelidir. Kaydetme işleminin devam etmesini istiyorsanız, bu işlev de doğru olmalıdır.

Bu geri arama, verileriniz saklanmadan önce gerçekleşmesi gereken herhangi bir veri masajı mantığı için özellikle kullanışlıdır. Depolama motorunuzun belirli bir tarihte olması gerekiyorsa, $ this-> data adresinden erişin ve değiştirin.

Aşağıda, tarih dönüştürme için beforeSave öğesinin nasıl kullanılabileceğine dair bir örnek verilmiştir. Örnekteki kod, veritabanında YYYY-AA-GG biçiminde biçimlendirilmiş bir başlangıç ​​değerine sahip bir uygulama için kullanılır ve uygulamada DD-MM-YYYY gibi görüntülenir. Tabii ki bu çok kolay değiştirilebilir. Uygun modelde aşağıdaki kodu kullanın.

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 döndürür veya kaydetme başarısız olacak emin olun. Doğru yöntem beyanı bulunur böylece