2015-04-26 7 views
5

Mi viene mostrato il seguente errore in cima alla mia pagina quando utilizzando il metodo beforeSave nel mio modello di caricamento.

Strict (2048): Dichiarazione di Upload :: BeforeSave() dovrebbe essere compatibile con Modello :: BeforeSave ($ options = Array) [APP/Modello/upload.php, linea 5]

Qualcuno potrebbe indicare cosa sto facendo male?

Ecco il mio modello:

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

} 

?> 

risposta

11

Basta cambiare questa linea

public function beforeSave() { 

a questo, in modo da avere dichiarazione di metodo corretto

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

La funzione beforeSave() esegue immediatamente dopo che i dati modello è stato validato con successo, ma poco prima i dati vengono salvati. Questa funzione dovrebbe anche restituire true se si desidera che l'operazione di salvataggio continui.

Questo callback è particolarmente utile per qualsiasi logica di massaggio dei dati che deve verificarsi prima che i dati vengano archiviati. Se il tuo motore di archiviazione ha bisogno di date in un formato specifico, accedi a $ this-> data e modificalo.

Di seguito è riportato un esempio di come beforeSave può essere utilizzato per la conversione della data. Il codice nell'esempio viene utilizzato per un'applicazione con un formato simile a YYYY-MM-DD nel database e viene visualizzato come DD-MM-YYYY nell'applicazione. Naturalmente questo può essere cambiato molto facilmente. Usa il codice qui sotto nel modello appropriato.

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

Assicurarsi che BeforeSave() restituisce true, o il vostro Salva sta per fallire.

Problemi correlati