Modelos de formularios con Yii (formulario y acción)

Introducción.

Le etapa final de la implementación de la aplicación basada en formularios web corresponde con la implementación del formulario (vista) y de la acción del controlador que la va a procesar.

Definición de las etiquetas del formulario.

  • Permite definir desde el modelo las etiquetas que acompañarán a cada uno de los atributos del mismo.
  • Es preferible este método en lugar de escribirlos manualmente en la vista ya que permite modificarlos según sucedan ciertas situaciones.  Por ejemplo, resaltarlos en rojo (mediante CSS) cuando la validación arroja un valor en un campo específico.
  • Para definirlas es necesario sobreescribir el método attributeLabels() del modelo.  Por defecto se retornan los mismos nombres de los atributos.
public function attributeLabels()
{
    return array(
        'value1'   => 'Operando #1',
        'value2'   => 'Operando #2',
        'operator' => 'Operación'
    );
}

Creación del formulario.

  • Yii provee algunos ayudantes para la creación y estandarización de código HTML mediante la clase CHtml como CHtml::textField, CHtml::dropDownList, CHtml::beginForm y CHtml::endForm.
<div class='formulario'>
    <?php echo CHtml::beginForm(); ?>
    <?php echo CHtml::errorSummary($calc); /* $calc es una referencia al modelo */ ?>

    <div class='operacion'>
        <div class='operando'>
            <?php echo CHtml::activeLabel($calc, 'value1'); ?>
            <?php echo CHtml::activeTextField($calc, 'value1'); ?>
        </div>
        <div class='operador'>
            <?php echo CHtml::activeLabel($calc, 'operator'); ?>
            <?php echo CHtml::activeTextField($calc, 'operator'); ?>
        </div>
        <div class='operando'>
            <?php echo CHtml::activeLabel($calc, 'value2'); ?>
            <?php echo CHtml::activeTextField($calc, 'value2'); ?>
        </div>
</div>
<div class='acciones'>
    <?php echo CHtml::submitButton('Ejecutar'); ?>
</div>

<?php echo CHtml::endForm(); ?>
</div>

Creación de la acción.

  • Contiene la lógica del controlador que manipula los modelos de acuerdo al requerimiento recibido por parte del usuario.
public function actionCalculate()
{
    $calc = new CalculatorForm();

    if(isset($_POST['CalculatorForm']))                         /* If the form was submitted */
    {
        $calc -> attributes = $_POST['CalculatorForm'];         /* Populate the form with POST data */

        if($calc -> validate())                                 /* Validate the input data */
            // ...                                              /* On success do something */

        $this -> render('result', array('calc' => $calc));      /* Render a view */
    }
}

Enlaces.

Leave a Reply

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