Fino qui tutto bene, anche la questione della lingua.
L’unica scocciatura è che usa il formato data con 4 cifre per l’anno, che è ok, se non che sto usando un validator fatto così:
public function rules()
{
$localizedTimeFormat = Yii::app()->getLocale()->getDateFormat('short');
$localizedTimeFormat .= "yy"; // 4 cifre per l'anno
// NOTE: you should only define rules for those attributes that
// will receive user inputs.
return array(
....
array('validFromDate, validToDate', 'date',
'format' => $localizedTimeFormat, .
'message' => Yii::t('general',"dateFormatError")." '$localizedTimeFormat'" ),
......
);
}
Come avete visto ho fatto la schifezza di appendere due ‘yy’ al formato short. Altro non mi è venuto in mente, comunque per le 5-6 lingue che ci servono attualmente, va tutto bene, la validazione resiste.
Ora però mi trovo che salvando il record… beh… mi salva (in qualsiasi lingua) … ‘0000-00-00’ segno che ovviamente la stringa in formato localizzato non coincide con quella di mysql.
Come e dove devo intervenire per far salvare il dato correttamente ?
// Conversione dal formato data localizzata per l'utente verso il formato mysql
protected function beforeSave()
{
$this->validFromDate=date('Y-m-d', strtotime( MyHelper::localizedDateFormat() , $this->validFromDate ) );
$this->validToDate=date('Y-m-d', strtotime( MyHelper::localizedDateFormat() , $this->validToDate ) );
return parent::beforeSave();
}
Le date però mi vengono salvate come 1970-01-01, indifferentemente da lingua e dalla data in se (la validazione però sembra corretta, ho provato ad inserire date strane per il formato atteso e vengono rifiutate)
// Converte una data dal formato locale al formato mysql 'date'
// da usare nei beforeSave();
public static function convertLocalizedDateToMySql($dateString)
{
$df = CprHelper::localizedDateFormat();
$search = array ('/d+/','/M+/','/y+/');
$replace = array ('d','m','Y');
$phpDf = preg_replace($search,$replace,$df);
$objDate = DateTime::createFromFormat($phpDf,$dateString);
return $objDate->format('Y-m-d');
}
Ora il problema opposto: quando vado in modifica, la data mi viene presentata nel formato mysql, ma io la voglio nel formato localizzato
invece del beforeSave, di quale metodo devo fare l’override ?
Davvero Yii non ha un modo per gestire queste situazioni ?
Ottengo quasi quello che voglio… a me la data serve con l’anno a 4 cifre… in italiano, e tutto nasce dal fatto che quel CJuiDatePicker usa l’anno a 4 cifre fregandosene della reale localizzazione … com’è possibile !!!
eh già … è quello il problema, usando nelle options del componente come date_format il formato short loale, lui usa due cifre per l’anno.
Avendo a che fare con almeno 5 lingue, come posso fare per affrontare la questione del triangolo tra
Yii | JuiDatePicker | MySql
?
Come è possibile che Yii manchi di questa cosa nel 2012 !??!
Questa cosa, e il fatto di dover leggere i parametri da $_GET e da $_POST a manina mi hanno deluso parecchio… Speriamo in una 1.2 … oppure che tra un paio di anni quando sarà pronta la 2 tutto questo sarà solo un lontano ricordo…
posto che proverò a implementare le date come mi suggerisci e poi riferirò ,
apro una parentesi sui POST. Ho provato in una form ad inserire una $form->dropdown usando come nome una variabile pubblica del model, ma salvando la form in fase di update, in caso di errori, comunque il campo non viene ripopolato ed ho dovuto prendere $_POST[NomeOggetto][NomeCampo] ed assegnarlo a $model->NomeCampo.