Foros del Web » Programando para Internet » PHP » Zend »

Cómo validar un subformulario en Zend Framework?

Estas en el tema de Cómo validar un subformulario en Zend Framework? en el foro de Zend en Foros del Web. Hola a todos, Zend Framework ofrece el sistema de validadores para poder validar un elemento de un formulario. Extendiendo la clase Zend_Validate_Abstract se puede crear ...
  #1 (permalink)  
Antiguo 14/08/2010, 02:25
 
Fecha de Ingreso: abril-2009
Ubicación: Barcelona
Mensajes: 9
Antigüedad: 15 años
Puntos: 0
Cómo validar un subformulario en Zend Framework?

Hola a todos,

Zend Framework ofrece el sistema de validadores para poder validar un elemento de un formulario. Extendiendo la clase Zend_Validate_Abstract se puede crear uno propio. Después, al elemento del formulario, se puede añadir el validador con el método ->addValidator() y ya lo tenemos todo.

Mi pregunta viene en el caso de tener un formulario que tiene un conjunto de subformularios, y hay que validar una característica del conjunto de subformularios. Pongo un ejemplo:

El formulario sirve para editar un equipo de futbol. Dentro del formulario, tengo un subformulario que contiene 23 jugadores (cada jugador representado con otro subformulario). El validador ha de comprobar que estén marcados 11 como titurales, ni más ni menos. La estructura del formulario sería algo así:

Equipo (Zend_Form)
Nombre (Zend_Form_Input)
Jugadores (Zend_Subform)
Jugador1 (Zend_Subform)
Nombre (Zend_Form_Input)
Titular (Zend_Form_Radio)
Jugador2 (Zend_Subform)
Nombre (Zend_Form_Input)
Titular (Zend_Form_Radio)
Jugador3 (Zend_Subform)
Nombre (Zend_Form_Input)
Titular (Zend_Form_Radio)
Jugador4 (Zend_Subform)
Nombre (Zend_Form_Input)
Titular (Zend_Form_Radio)
Jugador5 (Zend_Subform)
Nombre (Zend_Form_Input)
Titular (Zend_Form_Radio)
...
La solución provisional que he hecho es, crear un validador y sobreescribir el método isValid del subformulario Jugadores para ejecutar el método padre (parent::isValid()) y después mi validador, y comprobar los 11 jugadores titulares.

Alguien tiene una mejor idea, o otro planteamiento?
  #2 (permalink)  
Antiguo 14/08/2010, 11:31
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Cómo validar un subformulario en Zend Framework?

Lo que puedes hacer también es usar el método isValidPartial, o usando la subforma:
Código PHP:
Ver original
  1. $sub = $form->subform;
  2. if ($sub->isValid($data)) {
  3.      echo "yes";
  4. }

Saludos.
  #3 (permalink)  
Antiguo 17/08/2010, 00:22
 
Fecha de Ingreso: abril-2009
Ubicación: Barcelona
Mensajes: 9
Antigüedad: 15 años
Puntos: 0
Respuesta: Cómo validar un subformulario en Zend Framework?

No creo que sea esta la solución, usar isValidPartial(). Por lo que he entendido, se usa para validar parte del formulario, como cuando no se tienen todos los datos del formulario y se quieren validar.

El problema que tengo es que los validadores de Zend se pueden asignar a elementos del formulario, pero no a subformularios.
  #4 (permalink)  
Antiguo 17/08/2010, 09:19
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Cómo validar un subformulario en Zend Framework?

Por eso como te comento puedes acceder al objeto de la subforma y validarla directamente. Los validadores no se cargan a los formularios, solo se pueden cargar a los elementos individuales, pertenezcan o no a una subforma.

Saludos.
  #5 (permalink)  
Antiguo 17/08/2010, 09:31
 
Fecha de Ingreso: abril-2009
Ubicación: Barcelona
Mensajes: 9
Antigüedad: 15 años
Puntos: 0
Respuesta: Cómo validar un subformulario en Zend Framework?

Pero yo no quiero acceder a un elemento de un subformulario; no me interesa validar un elemento. Me interesa validar el subformulario como objeto.

Hablando del ejemplo que puse de jugadores, no me interesa validar si un jugador esta marcado como titular o no, sinó me interesar validar que hay 11 jugadores marcados como titulares.
  #6 (permalink)  
Antiguo 17/08/2010, 09:55
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Cómo validar un subformulario en Zend Framework?

Ese código que te puse es precisamente para eso para acceder a un subformulario como tal y validarlo TODO el subformulario, no solo un elemento.
  #7 (permalink)  
Antiguo 17/08/2010, 10:20
 
Fecha de Ingreso: abril-2009
Ubicación: Barcelona
Mensajes: 9
Antigüedad: 15 años
Puntos: 0
Respuesta: Cómo validar un subformulario en Zend Framework?

Primero quiero agradecerte las respuestas y el interés que estas demostrando.

La solución que me ofreces, valida TODO el subformulario. Más concretamente, ejecuta los validadores de cada uno de los elementos del subformulario. Creo que hasta aquí estamos de acuerdo.

Yo quiero que ejecute un validador propio, que valida el formulario en general, no sus elementos.
  #8 (permalink)  
Antiguo 17/08/2010, 10:31
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Cómo validar un subformulario en Zend Framework?

En ese caso tendrías que hacer una subclase de Zend_Form y sobreescribir el método isValid para ejecutar tu lógica y validar lo que quieras.

Saludos.
  #9 (permalink)  
Antiguo 18/08/2010, 00:35
 
Fecha de Ingreso: abril-2009
Ubicación: Barcelona
Mensajes: 9
Antigüedad: 15 años
Puntos: 0
Respuesta: Cómo validar un subformulario en Zend Framework?

Y quizás también un sistema para añadir y almacenar validadores, para que después en el isValid() los ejecute no?
  #10 (permalink)  
Antiguo 18/08/2010, 07:21
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Cómo validar un subformulario en Zend Framework?

Así es aunque esos validadores ya no dependerian del elemento en concreto, si no de toda la forma.

Etiquetas: framework, validar, formulario
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:20.