Yii Framework Forum: Validar Arreglo De Modelos - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Validar Arreglo De Modelos con performAjaxValidation Rate Topic: -----

#1 User is offline   Darril 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 51
  • Joined: 02-June 11

Posted 09 January 2013 - 02:46 PM

Alguien se topó con esto?

Necesito validar un arreglo de modelos, estuve viendo que "performAjaxValidation" recibe una instancia o un arreglo de modelos, pero no consigo que valide los modelos correctamente, alguien tiene alguna idea??
0

#2 User is offline   robregonm 

  • Expert Yii Developer
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 594
  • Joined: 30-July 09
  • Location:Colombia

Posted 10 January 2013 - 03:06 PM

La función performAjaxValidation tiene un bug, que no ha sido corregido al día de hoy (hasta donde sé), por lo cual tengo una modificación a esa función que resuelve ese problema:

    public static function validate($models, $attributes = null, $loadInput = true)
    {
        $result = array();
        if (!is_array($models)) {
            $models = array($models);
        }
        foreach ($models as $model) {
            if (is_array($model)) {
                foreach ($model as $key => $submodel) {
                    if ($loadInput && isset($_POST[get_class($submodel)][$key])) {
                        $submodel->attributes = $_POST[get_class($submodel)][$key];
                    }
                    $submodel->validate($attributes);
                    foreach ($submodel->getErrors() as $attribute => $errors) {
                        $result[CHtml::activeId($submodel, '[' . $key . ']' . $attribute)] = $errors;
                    }
                }
            } else {
                if ($loadInput && isset($_POST[get_class($model)])) {
                    $model->attributes = $_POST[get_class($model)];
                }
                $model->validate($attributes);
                foreach ($model->getErrors() as $attribute => $errors) {
                    $result[CHtml::activeId($model, $attribute)] = $errors;
                }
            }
        }
        if (Yii::app()->getRequest()->getIsAjaxRequest()) {
            return function_exists('json_encode') ? json_encode($result) : CJSON::encode($result);
        } else {
            return $result;
        }
    }


    /**
     * Performs the AJAX validation.
     * #MethodTracker
     * This method is based on the gii generated method controller::performAjaxValidation, from version 1.1.7 (r3135). Changes:
     * <ul>
     * <li>Supports multiple models.</li>
     * </ul>
     * @param CModel|array $model The model or array of models to be validated.
     * @param string $form The name of the form. Optional.
     */
    protected function performAjaxValidation($model, $form = null)
    {
        if (Yii::app()->getRequest()->getIsAjaxRequest() && (($form === null) || ($_POST['ajax'] == $form))) {
            echo self::validate($model);
            Yii::app()->end();
        }
    }



Este código tendría que estar en el archivo components/Controller.php

Espero le sirva.

Saludos
Ricardo Obregón

YiiFramework en Español - http://yiiframework.co/ - http://yiiframeworkenespanol.org/ - Yii Code Generator for Bootstrap
http://obregon.co/ - https://1server.co/
PHP 5.5+, nginx 1.7, MySQL(MariaDB & PerconaDB), PostgreSQL 9, Yii 2, CanJS
Follow me: @robregonm & @obregonco & @1ServerCo.
0

#3 User is offline   robregonm 

  • Expert Yii Developer
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 594
  • Joined: 30-July 09
  • Location:Colombia

Posted 10 January 2013 - 03:08 PM

Cabe adicionar que hay una extensión de generación de código en la qu, esta corrección ya está incluída (adicionalmente que genera el código de más calidad y totalmente compatible con el framework CSS Bootstrap): AweCrudAsí que eventualmente podría ayudarle más en el desarrollo de su aplicación.

Saludos.
Ricardo Obregón

YiiFramework en Español - http://yiiframework.co/ - http://yiiframeworkenespanol.org/ - Yii Code Generator for Bootstrap
http://obregon.co/ - https://1server.co/
PHP 5.5+, nginx 1.7, MySQL(MariaDB & PerconaDB), PostgreSQL 9, Yii 2, CanJS
Follow me: @robregonm & @obregonco & @1ServerCo.
0

#4 User is offline   robregonm 

  • Expert Yii Developer
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 594
  • Joined: 30-July 09
  • Location:Colombia

Posted 10 January 2013 - 03:12 PM

Esto es una especie de "Postdata":
Si esos múltiples modelos son relaciones del modelo principal no está de más probar extensiones como:

Saludos
Ricardo Obregón

YiiFramework en Español - http://yiiframework.co/ - http://yiiframeworkenespanol.org/ - Yii Code Generator for Bootstrap
http://obregon.co/ - https://1server.co/
PHP 5.5+, nginx 1.7, MySQL(MariaDB & PerconaDB), PostgreSQL 9, Yii 2, CanJS
Follow me: @robregonm & @obregonco & @1ServerCo.
0

#5 User is offline   Darril 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 51
  • Joined: 02-June 11

Posted 11 January 2013 - 04:41 PM

Te agradezco la respuesta.

Estoy probando el código que mencionaste, pero creo que mi problema va por guardar modelos relacionados, probaré tb con las extensiones y te comento.

Gracias.
0

#6 User is offline   Darril 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 51
  • Joined: 02-June 11

Posted 14 January 2013 - 09:52 AM

Creo que mi problema está en el diseño, como modelarian esto.

El contacto que un usuario es escencial, contacto puede ser un celular, telefono fijo, correo electronico, facebook, etc. Cada
usuario puede tener mas de un telefono, celular, etc. Ademas de ello como la tecnología es tan cambiante, tiene que poder agregarse
nuevas formas de comunicacion.

pensé en dos modelos:

El modelo1 Usuario(nombre,etc), Medio_Comunicacion(nombre_medio_comunicacion) y Contacto_Usuario(usuario,medio,valor).

Usuario:
1,pepe, aguilar

Medio_comunicacion:
1,celular
2,telefono
3,correo_electronico

Contacto_usuario:
1,1,1,76765652
2,1,2,4565432
3,1,3,"pepe@gmail.com"

Este modelo es el que actualmente implementé, el principal problema es la validación pues "valor" puede contener numeros de 7 u 8 digitos,
un correo electronico, una cuenta de facebook, etc. Actualmente estoy validando con javascript pues no encontré como hacerlo
con el framework.

El modelo2 lo como se ve en la imagen es tener una tabla para cada medio de comunicacion, lo cuál descarte porque éste no puede crecer. Cuál
es la mejor alternativa? o existe otra mejor que no contenple? opinen por favor.

Gracias.

Attached File(s)


0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users