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.


Commenti