Ver Mensaje Individual
  #1 (permalink)  
Antiguo 23/05/2011, 22:50
lalolerena
 
Fecha de Ingreso: octubre-2010
Ubicación: Uruguay, Canelones
Mensajes: 66
Antigüedad: 14 años, 2 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!!!!