Ottimo. Funziona alla perfezione.
Sarebbe bello se si potesse anche intercettare e modificare i valori passati da una ricerca; ad esempio quelli della form integrata tramite CGridView in una view "Admin".
Per spiegarmi meglio, prendiamo il metodo search() di un modulo ed impostiamo un criterio per la ricerca di determinati record in base alla data di creazione:
$criteria->compare('t.cr_date', $this->cr_date,true);
poi lasciamo che un utente inserisca la data da ricercare nel formato dd/mm/yyyy.
Se non interveniamo sul valore $this->cr_date trasformandolo in yyyy-mm-dd, la ricerca non produce alcun risultato.
Per ovviare a questo problema (premetto che sono un novizio in yii) ho creato un metodo da inserire direttamente nel modello in questione:
private function reformat($date) {
$separatore = '/';
$preg = "/([0-9]{1,2})\\".$separatore."([0-9]{1,2})\\".$separatore."([0-9]{4})/";
if (preg_match($preg, $date, $regs)) {
$_dtdb = $regs[3] . "-" . $regs[2] . "-" . $regs[1];
$_dtrq = $regs[1] . $separatore . $regs[2] . $separatore . $regs[3];
return str_replace($_dtrq, $_dtdb, $date);
} else {
return $date;
}
}
e facendolo agire nel criterio
$criteria->compare('t.cr_date', $this->reformat($this->cr_date),true);
ottengo il risultato voluto…
Esiste invece il modo di utilizzare opportunamente il metodo beforeFind() della classe CActiveRecordBehavior, quindi implementando la classe myDateFormat che la estende?
Io non ci sono riuscito e, a prima vista, non ci ho capito un granché!
Grazie!!!!