CakePHP: tradurre i messaggi di validazione dei modelli
ATTENZIONE!
Il post ha più di 2 anni e le informazioni contenute
potrebbero essere obsolete (ad esempio a causa di un
aggiornamento di versione rispetto agli elementi descritti
o links modificati da siti esterni).
Per validare i dati server side in cakePHP si utilizza solitamente la proprietà $validate dei modelli:
class User extends AppModel {
var $name = 'User';
var $validate = array(
'name' => array(
'rule' => 'notEmpty',
'message'=>"Campo obbligatorio"
),
'surname' => array(
'rule' => 'notEmpty',
'message'=>"Campo obbligatorio"
),
'mail' => array(
'rule' => 'email',
'message'=> "L'e-mail deve essere valida"
)
);
}
In questo modo non è però possibile gestire la traduzione dei messaggi di errore nel caso di un'applicazione multilingua. Per risolvere il problema si deve creare il file app_model.php nella cartella app con il seguente codice:
class AppModel extends Model{
public $validate = array();
public function __construct($id = false, $table = null, $ds = null) {
parent::__construct($id, $table, $ds);
$this->_validationRules();
}
/**
* Funzione che permette di inserire le traduzioni nei messaggi di errore per la validazione.
* Da implementare nei modelli figli.
*/
protected function _validationRules() {
}
}
Si devono poi modificare i modelli per i quali si desidera tradurre i messaggi di errore implementando la funzione _validationRules() al posto della proprietà $validate:
class User extends AppModel {
var $name = 'User';
protected function _validationRules() {
$this->validate = array(
'name' => array(
'rule' => 'notEmpty',
'message'=>__('Campo obbligatorio',true)
),
'surname' => array(
'rule' => 'notEmpty',
'message'=>__('Campo obbligatorio',true)
),
'mail' => array(
'rule' => 'email',
'message'=> __("L'e-mail deve essere valida",true)
)
);
}
}
In questo modo è possibile utilizzare la funzione __("Messaggio", return) per gestire le traduzioni tramite i files .po.

CakePHP: modificare la posizione dei messaggi di errore nei forms
PHP: eseguire l'output di una stringa durante l'esecuzione di uno script con ob_start(), ob_flush(), flush()
Commenti