Los formularios en Yii se definen en un modelo de formulario, en el que indicamos los campos del formulario y las reglas de validación de este, posteriormente en la vista imprimimos el formulario. Esto esta muy bien ya que de forma automática nos valida y nos repobla los formularios sin mucho esfuerzo.
Lo que diferencia a Yii de otros frameworks en este sentido no es que su componente de validación sea mas potente (el de ZF2 es superior), sino que tenemos la posibilidad de automatizar la validación en el lado del cliente (con jQuery) y en el del servidor, lo cual es espectacular.
Crear modelo de formulario
Las clases o modelos de formulario se crean en el directorio protected/model y los ficheros se tienen que llamar NombreDelFormularioForm.php
Ejemplo:
protected/model/UsuariosForm.php
<?php class UsuariosForm extends CFormModel{ //Campos que tendrá el formulario public $nombre; public $apellido; public $password; public $email; //Reglas de validación public function rules(){ return array( //Estos campos serán obligatorios array('nombre, email, password,apellido', 'required', "message"=>"Este campo es obligatorio"), //Validando el nombre con una expresión regular array( "nombre, apellido", "match", "pattern" => "/^[a-zA-Z ñÑáéíóúüç]*$/", "message"=>"El nombre solo puede estar formado por letras" ), //Aplicamos la validación de emails array('email', 'email','message'=>"El email es incorrecto"), //Especificamos una longuitud a la contraseña array('password', 'length', "min"=>8, 'tooShort'=>"La contraseña debe tener como mínimo 8 letras"), ); } } ?>
El controlador:
public function actionUsuarios(){ //Creamos el objeto del formulario $model=new UsuariosForm(); //Si el formulario es enviado if(isset($_POST['UsuariosForm'])){ //Repoblamos el formulario $model->attributes=$_POST['UsuariosForm']; //Validamos el formulario y cargamos una vista distinta en cada caso if($model->validate()){ $this->render('recibir_form',array( "datos"=>$_POST["UsuariosForm"], )); }else{ $this->render('usuarios',array( "formulario"=>$model )); } }else{ $this->render('usuarios',array( "formulario"=>$model )); } }