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

Zend Form problema con muestreo de errores

Estas en el tema de Zend Form problema con muestreo de errores en el foro de Zend en Foros del Web. Tengo este form Código: <?php class Form_Login extends Zend_Form { public $elementDecorators = array( 'ViewHelper', array('ViewScript', array('viewScript' => 'scripts/decorator/form.phtml', 'placement' => false), )); public $buttonDecorators ...
  #1 (permalink)  
Antiguo 23/05/2011, 22:50
 
Fecha de Ingreso: octubre-2010
Ubicación: Uruguay, Canelones
Mensajes: 66
Antigüedad: 13 años, 6 meses
Puntos: 6
Zend Form problema con muestreo de errores

Tengo este form
Código:
<?php
	class Form_Login extends Zend_Form
	{
	    public $elementDecorators = array(
	        'ViewHelper',
	    	array('ViewScript', array('viewScript' => 'scripts/decorator/form.phtml', 'placement' => false),
	    ));
	
	    public $buttonDecorators = array(
	        'ViewHelper',
	        array(array('data' => 'HtmlTag'), array('tag' => 'td', 'class' => 'element', 'colspan' => 2)),
	        array(array('label' => 'HtmlTag'), array('tag' => 'td', 'placement' => 'append')),
	        array(array('row' => 'HtmlTag'), array('tag' => 'tr')),
	    );
		
		
		public function login( )
		{
			$translate = Zend_Registry::get('Zend_Translate');
			$User_Library_Varias = Zend_Registry::get('User_Library_Varias');
			
		    $this	->setAttrib('enctype', 'multipart/form-data') 
	        		->setAttrib('id','FormsLogin')
	        		->setAction(Zend_Registry::get('baseUrl'));
	        
			$element = array();
	        
			$usuario_element = new Zend_Form_Element_Text('FormsLogin_usuario'); //Generamos un elemento tipo text
			//Le asignamos todas las caracteristicas del campo
			$usuario_element	->setRequired(true) //Lo hacemos requerido
								->addValidator('EmailAddress', false) //Validamos que sea mail
								->setDecorators($this->elementDecorators) //Este decorator esta asignado arriba
								->addErrorMessages(array(
															$User_Library_Varias->__CharToChange($translate->translate('No puede estar vacío este campo')),
															$User_Library_Varias->__CharToChange($translate->translate('Incorrecto. El usuario debe ser su correo electrónico'))
														)) //Enviamos los mensajes de error
								->setLabel($User_Library_Varias->__CharToChange($translate->translate('FormLogin_usuario'))) //Label del campo
								//Le agregamos atributos al campo
								->setAttrib('class', 'text ui-widget-content ui-corner-all') //Asignamos etiquetas al campo
								->setAttrib('title', $User_Library_Varias->__CharToChange($translate->translate('FormLogin_usuario_Title')));
			
			$element[] = $usuario_element;
			
			$contrasenia_element = new Zend_Form_Element_Password('FormsLogin_contrasenia'); //Generamos un elemento tipo text
			//Le asignamos todas las caracteristicas del campo
			$contrasenia_element	->setRequired(true) //Lo hacemos requerido
									->addValidator('stringLength', false, array(6, 80)) //Validamos la longitud del texto
									->setDecorators($this->elementDecorators) //Este decorator esta asignado arriba
									->addErrorMessages(array(
																$User_Library_Varias->__CharToChange($translate->translate('No puede estar vacío este campo')),
															)) //Enviamos los mensajes de error
									->setLabel($User_Library_Varias->__CharToChange($translate->translate('FormsLogin_contrasenia'))) //Label del campo
									//Le agregamos atributos al campo
									->setAttrib('class', 'text ui-widget-content ui-corner-all') //Asignamos etiquetas al campo
									->setAttrib('title', $User_Library_Varias->__CharToChange($translate->translate('FormLogin_contrasenia_Title')));
			
			$element[] = $contrasenia_element;
			
	        $aceptar_element = new Zend_Form_Element_Submit('FormsLogin_aceptar');
	        $aceptar_element	->setValue('FormsLogin_aceptar')
			        			->setAttrib('style', 'margin-right: 3px;')
								->setAttrib('title', $User_Library_Varias->__CharToChange($translate->translate('FormLogin_aceptar_Title')))
			        			->setDecorators($this->buttonDecorators);
	        
	        $element[] = $aceptar_element;
		        		
	        return $this->setElements($element);
	        
		}
	    
		public function loadDefaultDecorators()
	    {
	        $this->setDecorators(array(
	            'FormElements',
	            array('HtmlTag', array('tag' => 'table')),
	            'Form',
	        ));
	    }
	}
Mi gran tema pasa cuando quiero mostrar el error, no me surge nunca ya no se que hacer y me estoy llendo por las ramas!!!. Necesito de su ayuda.
Busque en diferentes lugares aqui y en ninguno encontre la solución.

Por las dudas, el decorador que en un viewScript:
Código:
<!-- Esta primera parte reemplazaria HtmlTag -->
<tr class="formElementContent">
	<!--  parte que remplaza el decorador Label -->
	<td>
    <?php 
    	$attribs = $this->element->getAttribs();
    	$label = $this->element->getLabel();
    	
    	//nuevo, verificamos si el elemento es requerido, 
    	//entonces agregamos un elemento en html al final de la etiqueta
    	if ($this->element->isRequired()) {
    		$attribs['escape'] = false;
    		$label = $this->escape($label);
    	}
    	
    	echo $this->formLabel($this->element->getName(), $label); 
    ?>
    </td>
    <td>
    <!-- parte del elemento -->
    <?php echo $this->content ?>
    
    <!-- 
    	parte que reemplaza Errors
    	observen que estoy poniendo los errores 
    	con simples saltos de linea en lugar de lista
     -->
     </td>
</tr>
//Esta área  no funciona
<?php if ($this->element->getErrors()): ?> //Esto está mal no encuentro como arreglarlo
<tr>
    <!-- esta parte es opcional si agregaron una descripción -->
    <td class="hint"><?php echo $this->element->getErrors() ?></td>
</tr>
<?php endif ?>
<?php if ($this->element->get): ?>
<tr>
    <!-- esta parte es opcional si agregaron una descripción -->
    <td class="hint"><?php echo $this->element->getDescription() ?></td>
</tr>
<?php endif ?>
<tr id="tr_<?php echo $attribs['id'] ?>">
	<td colspan="2">
	</td>
</tr>
Desde ya muchas gracias!!!!
  #2 (permalink)  
Antiguo 24/05/2011, 01:58
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Zend Form problema con muestreo de errores

Que tal lalolerena,

A ver, que cacao que te armaste, tienes propiedades publicas, y porque estas traduciendo de esa forma ?, deberías setear el translator por defecto para el form, y en el fichero de traducciones traducir(valga la redundancia) los mensajes de error, labels, etc.., te dejo una referencia.

En el decorator, para saber si hay errores utiliza hasErrors, tienes un element->get, get no es una propieadad del element, falta algo y para que se dispare la validación debes utilizar Zend_Form::isValid en algún lugar.

Y te sugiero que utilices el syntax highlighter, así es mas fácil para nosotros leer tu código.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #3 (permalink)  
Antiguo 24/05/2011, 09:28
 
Fecha de Ingreso: octubre-2010
Ubicación: Uruguay, Canelones
Mensajes: 66
Antigüedad: 13 años, 6 meses
Puntos: 6
Respuesta: Zend Form problema con muestreo de errores

Perdon por ello, de a poco me voy asociando con esta espectacular foro!!!!!
Respecto a lo otro, era (sinceramente) una boludes de lógica que no me daba cuenta hasta que lo vi.
En el controlador que llamaba el formulario realizaba la validación antes de instanciar al formulario y enviarlo a la vista, entonces siempre lo que validaba era un nuevo formulario.

Muchas gracias por lo del translate, eso si, se me complica para cuando le realizo la traducción al atributo title.

Este es un proyecto que lo estoy haciendo (sin ningún interes comercial ni nada) solo para conocer a fondo Zend_Framework (Aprender a usarlo), quiero usar en este proyecto por lo menos un 99,9% de solo Zend_Framework.

Etiquetas: frameworks-y-php-orientado-a-objetos, zend-framework, formulario, zend-form
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 19:23.