Personalizar Mensajes de Kumbia, sin los <div></div>

11 views
Skip to first unread message

intel1981

unread,
Nov 5, 2010, 2:46:42 PM11/5/10
to Kumbia Enterprise Framework
Tengo una tabla con los siguiente estructura:

-- -----------------------------------------------------
-- Table `PRUEBA`.`CICLO`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `PRUEBA`.`CICLO` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT 'Es la llave primaria de la
tabla y es autonumerica' ,
`ANIO_INICIAL` INT(4) NOT NULL COMMENT 'Es el año inicial del ciclo
escolar' ,
`ANIO_FINAL` INT(4) NOT NULL COMMENT 'Es el año final del ciclo
escolar' ,
`CICLO_ACTUAL` INT(1) NOT NULL COMMENT 'Indica si es el ciclo
actual. 0=No seleccionado, 1= Ciclo actual' ,
PRIMARY KEY (`id`) )
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_general_ci
COMMENT = 'Tabla para los ciclos escolares';

Tengo un controlador ubicado en apps/default/controllers/
ciclos_controller.php el cual tiene el siguiente codigo:

$ciclo = new Ciclo();
$ciclo->setANIOINICIAL($this->getPostParam("ANIO_INICIAL"));
$ciclo->setANIOFINAL($this->getPostParam("ANIO_FINAL"));
$ciclo->setCICLOACTUAL('0');

if($ciclo->save()==false){
foreach($ciclo->getMessages() as $message){
$this->renderText($this->jsonEncode(array(
'success' => false,'msg' => $message->getMessage())
));

}

}
else{
$this->renderText($this->jsonEncode(array(
'success' => true,'msg' => 'El ciclo escolar ha sido creado
correctamente.')
));
}

En mi modelo /apps/default/models/ciclo.php tengo una validacion de la
siguiente manera:

protected function beforeSave(){
if($this->ANIO_INICIAL == $this->ANIO_FINAL){
Flash::error("El ciclo escolar es incorrecto.");
return false;
}
else{
return false;
}
}

El mensaje que me devuelve es el siguiente:

<div class="kumbiaDisplay errorMessage">El ciclo escolar es
incorrecto.</div>

Lo que yo quiero es que me devuelva el texto: El ciclo escolar es
incorrecto, para poder devolverlo a mi aplicacion en formato JSON.

He creado un componente en apps/default/Library/MyFlash/MyFlash.php el
cual tiene el siguiente codigo

class MyFlash extends UserComponent {

static public function error($msg){
return $msg;
}

}
y en mi modelo lo uso asi

protected function beforeSave(){
if($this->ANIO_INICIAL == $this->ANIO_FINAL){
MyFlash::error("El ciclo escolar es incorrecto.");
return false;
}
else{
return false;
}
}

Y revisando con el FireBug no obtengo ningun mensaje, ¿ pero por
cuando uso Flash::error() si logro visualizar el mensaje?

En resumen, quisiera realizarr ciertas validaciones antes de insertar,
y que estas me devuelvan un texto normal, para convertirlo a JSON y
poder usarlo con EXTJS.

De antemano gracias por su ayuda.

Manuel Antonio Mora Sandoval

unread,
Nov 5, 2010, 2:59:04 PM11/5/10
to kef-s...@googlegroups.com
En ves de retornarlo, si mal no estoy debes imprimirlo:


class MyFlash extends UserComponent {

               static public function error($msg){
                       echo $msg;
               }

       }

si lo quieres envia a un objeto JSON, deberias simplemente hacer:


protected function beforeSave(){
               if($this->ANIO_INICIAL == $this->ANIO_FINAL){
                       echo json_encode("El ciclo escolar es incorrecto."); //codificacion JSON.
               }
               else{
                       return false;
               }
       }

Pero revisa colocar al principio de la Accion que la respuesta es via ajax

$this->setResponse("ajax");

Eso seria todo, mira si te sirve, nos comentas que pasa.

Andres Felipe Gutierrez

unread,
Nov 5, 2010, 5:56:06 PM11/5/10
to kef-s...@googlegroups.com
En el controlador apps/default/controllers/ciclos_controller.php

//Devolver una salida JSON
$this->setResponse('json');

$ciclo = new Ciclo();
$anioInicial = $this->getPostParam("ANIO_INICIAL", "int");
$ciclo->setANIOINICIAL($anioInicial);
$anioFinal = $this->getPostParam("ANIO_FINAL", "int");
$ciclo->setANIOFINAL($anioFinal);

$ciclo->setCICLOACTUAL('0');
if($ciclo->save()==false){
    foreach($ciclo->getMessages() as $message){
        return array(

            'success' => false,
            'msg' => $message->getMessage()
        );
    }
} else{
    return array(

        'success' => true,
        'msg' => 'El ciclo escolar ha sido creado correctamente.'
    );
}

Al indicar $this->setResponse('json'); con el return ya se genera la salida JSON.
Luego en el evento del modelo, se crea un mensaje que es devuelto por el $ciclo->getMessages();


protected function beforeSave(){
    if($this->ANIO_INICIAL == $this->ANIO_FINAL){
        //Crear el mensaje de error
        $this->appendMessage(new ActiveRecordMessage('El ciclo escolar es incorrecto'));

        return false;
    } else{
        return false;
    }
}

2010/11/5 Manuel Antonio Mora Sandoval <mams...@gmail.com>

Manuel Antonio Mora Sandoval

unread,
Nov 5, 2010, 6:33:01 PM11/5/10
to kef-s...@googlegroups.com
mmm si todos los dias se aprende algo nuevo, esa tengo que ensyarla jejeje Gracias

intel1981

unread,
Nov 5, 2010, 9:46:24 PM11/5/10
to Kumbia Enterprise Framework
Antes que nada gracias a las respuestas de Manuel Antonio Mora
Sandoval y de Andres Felipe Gutierrez. La solucion a mi problema es la
que plantea Andres Felipe, gracias a su codigo he logrado que el
controlador le devuelva un texto JSON a mi aplicacion, que era lo que
me estaba dando un poco de dolor de cabeza.

Voy a exponer el codigo completo de mi controlador :
/apps/default/controller/ciclos_controller.php el cual esta disponible
en este enlace: http://pastebin.com/MgGbD0f2

y el codigo de mi modelo:
/apps/default/models/ciclo.php el cual esta disponible en este enlace:
http://pastebin.com/LYQuwfjt

El codigo corresponde a un modulo que sirve para crear nuevos ciclos
escolares, como por ejemplo: 2007-2008, 2008-2009....

Quisiera realizar la validacion de datos en dos partes:

Primera parte:
1) Que el año inicial no sea mayor al año final
2) Que el año inicial y el año final no sean iguales.

Segunda parte:
1) Que los datos introducidos sean del tipo correcto. (Enteros del 0
al 9)
2) Si el usuario envia uno o mas TextFields en blanco validar el error
y mostrar el mensaje correspondiente.

Ahora mis dudas:

A)
La primera parte de la validacion, ya la hice, como pueden ver en el
codigo del modelo y el controlador. Ahora bien, no me queda claro el
orden de las validaciones (si primero es la primera parte, luego la
segunda, o, la segunda y luego la primera, o, las dos al mismo
tiempo).

B)
Lo que yo quisiera saber es que por ejemplo, si el usuario envia un
cuadro de texto con caracteres, como validar ese valor, capturar el
campo y mostrar un texto personalizado de error.

C)
¿ Existe una mejor manera y mas practica de realizar las validaciones?
A lo que me refiero, es ¿ como usar las herramientas que proporciona
el framework para obtener un codigo solido y portable?

Quiero aclarar que he estado leyendo el manual del framework, pero
hasta ahora no logro realizar una buena validacion de datos.

De antemano gracias por la ayuda que me puedan brindar.

Y de nuevo gracias por su tiempo y sus respuestas.

On 5 nov, 16:33, Manuel Antonio Mora Sandoval <mams....@gmail.com>
wrote:
> mmm si todos los dias se aprende algo nuevo, esa tengo que ensyarla jejeje
> Gracias
>
> El 5 de noviembre de 2010 16:56, Andres Felipe Gutierrez <
> gutierrezandresfel...@gmail.com> escribió:
> > 2010/11/5 Manuel Antonio Mora Sandoval <mams....@gmail.com>
>
> > En ves de retornarlo, si mal no estoy debes imprimirlo:
>
> >> class MyFlash extends UserComponent {
>
> >>                static public function error($msg){
> >>                        echo $msg;
> >>                }
>
> >>        }
>
> >> si lo quieres envia a un objeto JSON, deberias simplemente hacer:
>
> >> protected function beforeSave(){
> >>                if($this->ANIO_INICIAL == $this->ANIO_FINAL){
> >>                        echo json_encode("El ciclo escolar es
> >> incorrecto."); //codificacion JSON.
> >>                }
> >>                else{
> >>                        return false;
> >>                }
> >>        }
>
> >> Pero revisa colocar al principio de la Accion que la respuesta es via ajax
>
> >> $this->setResponse("ajax");
>
> >> Eso seria todo, mira si te sirve, nos comentas que pasa.
Reply all
Reply to author
Forward
0 new messages