Validar y guardar formulario usando ExtJS 3.x y Symfony 1.4
Que tal un saludo a todos. Pues bien aqui me tienen con una duda que no se como implementarla. ¿Alguien sabe como puedo realizar lo siguiente usando Symfony: ?
1) Validacion del formulario creado con ExtJS, me refiero a la validacion de los datos (numeros enteros, cadenas de texto, direcciones de mail, etc.). Lo que no entiendo es como implementar el metodo de validacion antes de guardar el formluario.
2) Como guardar el formulario.
Segun la documentacion de Symfony (el manual, y Jobeet), explican como validar el formulario, pero eso se basa en que el formulario se define en los archivos de configuracion, pero al usar ExtJS los formularios no se definen en los archivos de configuracion, sino que se crean en los JS.
Se supone que para todo esto yo tendria que escribir mis propias validaciones y metodos para validar y guardar, pero he ahi el gran problema, ¿por donde empezar?
Espero que alguien me pueda hechar una mano, de antemano gracias.
Hola @Lperezc2010
1- Tengo dos tablas (persona - pais), con una relacion de uno a muchos,
cuando listo en el grid los datos de la tabla persona en vez de mostrarme
el pais al que pertenece una persona me muestra el ID del país al que pertenece,
no el nombre del país. Cómo pudiera arrglar esto? para que me mostrara el nombre del
pais y no el ID.
Tendrías que hacer un join en tu query para traerte el nombre del país desde el inicio, y en lugar de mostrar el ID del país muestra el nombre correcto en la columna configurando el dataindex adecuado.
2- Como Guardo datos desde un formulario, ya que tambien quiero crear mis formularios
de Symfony en ExtJS..
Puedes usar el método submit del formulario de la siguiente manera:
formulario.getForm().submit({
url : "path/url/para/guardar.php",
success : function(){
Ext.Msg.alert("Exito","Guardado con éxito!");
}
});
El submit hace una peticiónl al server via Ajax con todos los campos que definiste y la información que el usuario capturo.
Saludos
Hola, tengo un proyecto muy gande en symfony 1.4.9 con MySQL y quiero integrarlo
con ExtJS, ya he logrado hacer algunas cosas, gracias a esta pagina,
como listar datos en un Grid, pero mi primer problema es el siguiente:
1- Tengo dos tablas (persona - pais), con una relacion de uno a muchos,
cuando listo en el grid los datos de la tabla persona en vez de mostrarme
el pais al que pertenece una persona me muestra el ID del país al que pertenece,
no el nombre del país. Cómo pudiera arrglar esto? para que me mostrara el nombre del
pais y no el ID.
2- Como Guardo datos desde un formulario, ya que tambien quiero crear mis formularios
de Symfony en ExtJS..
saludos y de ante mano les doy las gracias por cualquier ayuda
que me puedan ofrecer..saludos..LUIS
Muchas gracias por tu tiempo y respuesta, y disculpa por volver a preguntar.
Esta parte de donde la tomas?
name: 'afiliado[fecha_nacimiento]',
Y esta tambien:
$form = new AfiliadoForm();
me imagino que ha ser de los archivos FormClass que crea symfony cuando se crean los modelos. ¿o de donde sale?
Y de nuevo muchas gracias por tu ayuda.
Hola Intel1981, yo desde hace dos años desarrollo en Symfony y el año pasado hice algunos intentos de implementar ExtJS, no hice mucho pero en esto que necesitas quizás te sirva lo que te voy a mostrar, quiero aclararte que en este caso utilizo el validador de Symfony, es decir que los campos se validan en el servidor y muestro el mensaje de error sin formato pero se puede mejorar...
En mi caso tenía una grilla en la cual se muestra un botón "Nuevo" y se abre una ventana con el formulario:
nuevoAfiliado: function(button,event){
this.fechaNacimiento = new Ext.form.DateField({
fieldLabel: 'Fecha Nac.',
name: 'afiliado[fecha_nacimiento]',
id: 'FECHA_NACIMIENTO',
emptyText:'Inserte una fecha...',
format:'Y-m-d',
width: 150
});
this.form = new Ext.form.FormPanel({
//standardSubmit: false,
url: "",
width:270,
bodyStyle:'margin-left:10px;',
border:false,
labelWidth: 80, //Con esto hacemos mas pequeñas las etiquetas
defaults: {
xtype:'textfield',
width:150
},
items:[
{fieldLabel:'Nombre',id:'NOMBRE', name:'afiliado[nombre]'},
{fieldLabel:'Apellido',id:'APELLIDO', name:'afiliado[apellido]'},
{fieldLabel:'DNI',id:'DNI', name:'afiliado[dni]'},
this.fechaNacimiento,
{fieldLabel:'Email',id:'EMAIL', name:'afiliado[email]'}
]
});
//Ext.Msg.alert('Prueba','Nombre: '+record.get('nombre')); //alert temporal
this.guardar = new Ext.Button({
text:'Guardar',
scope:this,
handler: function(){
this.form.getForm().submit({
waitMsg:'Guardando...',
waitTitle: 'Espere por favor...',
success: function(form,action){
Ext.Msg.alert('Success',action.result.msg,function(){
win.close();
button.findParentByType(Ext.grid.GridPanel).getStore().reload(this.record);
});
},
failure: function(form,action){
switch (action.failureType) {
case Ext.form.Action.CLIENT_INVALID:
Ext.Msg.alert('Failure', 'Form fields may not be submitted with invalid values');
break;
case Ext.form.Action.CONNECT_FAILURE:
Ext.Msg.alert('Failure', 'Ajax communication failed');
break;
case Ext.form.Action.SERVER_INVALID:
Ext.Msg.alert('Failure', action.result.msg);
break;
default:
Ext.Msg.alert('Failure',action.result.msg);
}
}
});
}
});
En caso de error la respuesta entra por failure y el objeto action (JSON) contiene la propiedad result, la cual contiene la variable msg que contendrá el mensaje de error. Entonces mi action de Symfony debe emitir una respuesta en json conteniendo el mensaje. En este caso la validación de ExtJS entrará por el case Ext.form.Action.SERVER_INVALID o por default y mostrará el contenido de action.result.msg.
public function executeGuardarAfiliado(sfWebRequest $request) {
$this->forward404Unless($request->isMethod(sfRequest::POST));
$afi = $request->getParameter('afiliado');
$form = new AfiliadoForm();
$form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName()));
$respuesta = array();
if ($form->isValid()) {
$Afiliado = $form->save();
$respuesta = array(
'success' => true,
'msg' => 'El afiliado fué creado exitosamente');
}
else {
$respuesta = array(
'success' => false,
'msg' => $form->getErrorSchema()->getMessage());
}
echo json_encode($respuesta);
return sfView::NONE;
}
Aún no hice pruebas con validaciones del lado del cliente pero espero que te sirva.
Saludos
Hernán
¿Conoces a alguien que pueda responder esta pregunta? Comparte el link en Twitter o Facebook
Es necesario registrarse para poder participar en el foro! Si ya tienes una cuenta puedes entrar y comentar en este foro.