Modelos de formularios con Yii (definición y asignación de atributos)

Introducción.

En Yii existen dos tipos de modelos: los basados en información que proviene de un formulario (form model) la cual se va obtener, manipular y desechar, y la proveniente de una base de datos (active record model) la cual provee las operaciones de CRUD sobre los datos.  En este artículo estaré haciendo referencia al primero de los modelos, el relacionado con la manipulación de información proveniente del usuario a través de un formulario.

El procedimiento típico para el desarrollo de las aplicaciones basadas en formularios es el siguiente.

  1. Crear un modelo que represente en sus campos a los datos que van a ser manipulados.
  2. Crear un controlador con sus respectivas acciones que respondan a los requerimientos del usuario.
  3. Crear una vista con el/los formulario/s asociados a las acciones.

Las acciones generales que es posible definir en un modelo basado en formularios son siguientes.

  • Definición.
  • Asignación de atributos (datos).
  • Validación.
  • Implementación de la acción.
  • Creación del formulario.

Definición.

  • Los modelos basados en formularios heredan de CFormModel.
  • Sus atributos definen los datos que van a ser almacenados del formulario.
  • Si se especifican valores por defecto para los atributos su estado se reflejará en las vistas correspondientes a los formularios.
class CalculatorForm extends CFormModel
{
    public $value1;
    public $value2;
    public $operator = '+';    // Default value.
}

Asignación de datos.

Es posible especificar valores para los atributos del modelo de dos maneras.

  1. Asignación individual.
  2. Asignación general.

Asignación individual.

  • Hace referencia al acceso directo de los atributos.
  • Se debe utilizar cuando es necesario realizar algún tipo de verificación o cálculo de la información proveniente del formulario.
$model = new CalculatorForm();
$model -> operator = '*';

Asignación general.

  • Asigna todos los atributos del modelo cuyos nombres coincidan con la información proporcionada, habitualmente en $_POST.
  • Se incluye un escenario que permite diferenciar cuales atributos si se deberán modificar durante la asignación general.
$model = new CalculatorForm();
$model -> scenario = 'calculate';
if(isset($_POST['CalcForm']))
    $model -> attributes = $_POST['CalcForm'];
  • Es posible filtrar/asegurar cuales son los valores seguros para asignar masivamente por cada uno de los escenarios posibles.
  • Para hacer esto es necesario sobreescribir el método safeAttributes() del modelo.
public function safeAttributes()
{
    return array(
        parent::safeAttributes(),

        /* Atributos que pueden ser asignados en todos los scenarios */
        'atrib1, atrib2, ...',

        /* Atributos que sólo pueden ser asignados en el escenario X */
        'escenarioX' => 'atribA, atribB, ...'
    );
}
  • Si ninguno de los atributos del modelo será dependiente de un escenario es posible simplificar el retorno de safeAttributes() en una cadena conteniendo el listado de los nombres de los atributos seguros para asignación general.
public function safeAttributes()
{
    /* Asignación general sin dependencia de escenarios */
    return 'atrib1, atrib2, ...';
}

Enlaces.

2 thoughts on “Modelos de formularios con Yii (definición y asignación de atributos)”

Leave a Reply

Your email address will not be published. Required fields are marked *