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

Problemas al aplicar un Decorator en Zend

Estas en el tema de Problemas al aplicar un Decorator en Zend en el foro de Zend en Foros del Web. He creado un formulario y cuando quiero aplicarle el decorador no se muestra en la vista , sino se lo aplico renderiza perfectamente, asi que ...
  #1 (permalink)  
Antiguo 09/12/2010, 10:41
 
Fecha de Ingreso: agosto-2009
Mensajes: 138
Antigüedad: 15 años, 3 meses
Puntos: 0
Problemas al aplicar un Decorator en Zend

He creado un formulario y cuando quiero aplicarle el decorador no se muestra en la vista , sino se lo aplico renderiza perfectamente, asi que el problema esta en el decorador..

En el controlador tengo esto:
Código PHP:
$form = new Admin_Form_Interesados();
      
  

 
$form->addPrefixPath('Admin_Forms_Decorators''Admin/Forms/Decorators/Interesados''Interesados');
$this->view->form
Donde creo el formulario esto:
Código PHP:
class Admin_Form_Interesados extends Zend_Form{

  protected 
$form;
  public function  
__construct($options null) {
    
parent::__construct($options);

    
//$this->setName('interesados');

  
  // $this->addPrefixPath('Admin_Form_Decorator_Interesados', 'Admin/Form/Decorator/Interesados','decorator');


    
$nombre = new Zend_Form_Element_Text('nombre');
    
$nombre->setLabel('Nombre')
            ->
setRequired(true)
            ->
addFilter('StringTrim');

    
    
$nif = new Zend_Form_Element_Text('nif');
    
$nif->setLabel('Nif/CIF')
        ->
setRequired(true)
        ->
addFilter('StringTrim');

    
$email = new Zend_Form_Element_Text('email');
    
$email->setLabel('Email')
          ->
setRequired(true);

    
$this->addElements(array($nombre,$nif,$email));
    
    
$this->setDecorators(array('FormElements',array('HtmlTag',
                         array(
'tag'=>'dl','class'=>'Zend  ')),
                         array(
'Interesados',array(
                                                  
'placement'=>'PREPEND','text'=>'Estos campos son obligatorios')),
                         
'Form')) ;
  } 
Y en mi Decorador lo siguiente.
Código PHP:
class Admin_Forms_Decorators_Interesados extends Zend_Form_Decorator_Abstract
{

  protected 
$_placement 'PREPEND';
  
  public function 
buildLabel($content){

    
    if(
null===($element $this->getElement())){
      return 
$content;
    }

    
$label $element->getName();
    if(
$element->isRequired()){
      
$text $this->getOption('text');
      
$output '<p class="requerido"> ' $text .  '</p>';
      
$label .= '*';
    }

    
$label .= ':';

   if (
null === ($view $element->getView())) {
      return 
$this->render($content$label);
   }
   
   
$label $view->formLabel($element->getName(), $label);

   return 
$this->render($content$label);
  }


   public function 
render($content,$newContent=null,$output=null)
   {
     
     
$separator $this->getSeparator();
     
$placement $this->getPlacement();

     
$output $this->buildLabel();
     
     switch (
$placment) {
        case 
'APPEND':
            
// append original content with new content
            
return $output $content $separator $newContent;
        case 
'PREPEND':
            
// prepend original content with new content
            
return $newContent $separator $content $output;
        default:
            
// replace otherwise
            
return $newContent;
     }
     

   }

  


Cual puede ser el problema.
  #2 (permalink)  
Antiguo 09/12/2010, 11:57
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 10 meses
Puntos: 845
Respuesta: Problemas al aplicar un Decorator en Zend

Hay varios errores:

Código PHP:
Ver original
  1. $form->addPrefixPath('Admin_Forms_Decorators', 'Admin/Forms/Decorators/Interesados', 'Interesados');

debería ser:

Código PHP:
Ver original
  1. $form->addPrefixPath('Admin_Forms_Decorators', 'Admin/Forms/Decorators', 'decorator');

El tercer parámetro es el tipo, puede ser decorator, filter o validate.

Después le aplicas el decorator al Form y no a un Element, esto va a hacer que falle buildLabel ya que preguntas por isRequired que no pertenece a Zend_Form sino a Zend_Form_Element,
luego en render estas invocando a buildLabel sin pasarle $content como parametro, y dentro de buildLabel generas un loop con render que no tiene fin.

Deberias mirar en el manual la parte de decorators.

Salu2.

Etiquetas: Ninguno
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 13:29.