Zend_Form, varsayılan dekoratörler yazılmadan, çalışmıyor

3 Cevap php

I zend_form ve zend_decorator ile ilgili sorunlar yaşıyorum.

Ben liste öğelerini kullanmak için tüm formları varsayılan bir dekoratör sınıf yarattık, ancak çalışıyor görünmüyor!

Esasen my_decorator_design uzanır zend_form ve sonra benim formları dekoratör uzatmak.

Fikirler?

class My_Decorator_Design extends Zend_Form {

 public function loadDefaultDecorators() {
  $this->addDecorator('FormElements')
  ->addDecorator('HtmlTag', array('tag' => 'ul')) //this adds a <ul> inside the <form>
  ->addDecorator('Form');

 $this->setElementDecorators(array(
  'ViewHelper',
  'Label',
  'Errors',
  new Zend_Form_Decorator_HtmlTag(array('tag' => 'li')) //wrap elements in <li>'s
 ));

 $this->setDisplayGroupDecorators(array(
  'FormElements',
  'Fieldset',
  new Zend_Form_Decorator_HtmlTag(array('tag' => 'li')), //wrap groups in <li>'s too
  new Zend_Form_Decorator_HtmlTag(array('tag' => 'ul'))
 )); 

 $this->setDisplayGroupDecorators(array(
  'FormElements',
  'Fieldset',
  new Zend_Form_Decorator_HtmlTag(array('tag' => 'li')) //wrap groups in <li>'s too
  ));
 }

}

class Forms_User_Update extends My_Decorator_Design {
  public function __construct($options=array()) {
    parent::__construct($options);//if we ever want to pass on things to zend_form
    $this->setName('user_update');
    $this->loadDefaultDecorators();

    //user_name, first_name, email, password, date_of_birth
    $user_name          = new Zend_Form_Element_Text('user_name');
    $first_name         = new Zend_Form_Element_Text('first_name');
    $email              = new Zend_Form_Element_Text('email');
    $password           = new Zend_Form_Element_Password('password');   
    $password2          = new Zend_Form_Element_Password('password2');
    $submit             = new Zend_Form_Element_Submit('Submit');

    $user_name->setRequired(true)
              ->setLabel('Username');
    $first_name->setRequired(false)
               ->setLabel('First Name');
    $email->setRequired(true)
          ->setLabel('Email:')
          ->addFilter('StringToLower')
          ->addValidator('NotEmpty', true)
          ->addValidator('EmailAddress');
    $password->setLabel('Password:')
             ->setRequired(false)
             ->setIgnore(false)
             ->addValidator('stringLength', false, array(6));
    $password2->setLabel('Confirm Password:')
              ->setRequired(false)
              ->setIgnore(true);
    $submit->setLabel("Submit")
           ->setIgnore(true);

    $this->addElements(array(
        $user_name, $first_name, $email, $password, $password2, $submit
    ));
    //$this->Submit->removeDecorator('Label');
    //$this->addElementPrefixPath('My_Decorator', 'My/Decorator/', 'decorator');
    $this->setMethod('post');
    $this->setAction('/update-account');    
  }
}

3 Cevap

Sen oradan yapıcı loadDefaultDecorators ve çağrı setElementDecorators.

Eğer bir hazır elemanı geçemedi zaman setElementDecorators sadece hiçbiri mevcut kontroller için (dekoratörler ayarlar Ama süre addElement, dizelerde elemanları inşa yalnızca eleman dekoratörler kullanır kurucudaki).

Ilk öğeleri oluşturmak ve sonra Elements gibi onları geçmek gibi eleman dekoratörler koymak asla.

Yapıcı loadDefaultDecorators için çağrı çıkarın.

Ben şimdi alıyorum

Warning: Exception caught by form: No file decorator found... unable to render file element

Bir dosya dekoratör ayarı ama onun değil çalışma denedim!

$this->addDecorator(array('File'), array('tag' => 'li'));

My_Decorator_Design sınıfı sonunda.

Ben bunun bir parçası olun:

    $this->setElementDecorators(array(
    'ViewHelper',
    'Label',
    'Errors',
'File',
    new Zend_Form_Decorator_HtmlTag(array('tag' => 'li')) //wrap elements in <li>'s
));

Ben olsun

Warning: Exception caught by form: Method getMaxFileSize does not exist Stack Trace: #0 [internal function]: Zend_Form_Element->__call('getMaxFileSize', Array) #1 /Users/aaron/Sites/project/name/library/Zend/Form/Decorator/File.php(108): Zend_Form_Element_Text->getMaxFileSize() #2 /Users/aaron/Sites/project/name/library/Zend/Form/Element.php(1978): Zend_Form_Decorator_File->render('titlepage

Fikirler?

Ben de bu tür sorunlar ile karşı karşıya gelmiş ama sonunda dosya elemanı ve diğer giriş elemanları hem zend formu özelleştirilmiş.

Zend formda diğer unsurları ile dosya dekoratör uygulamak için aşağıdaki kodu kullanabilirsiniz.

<?php 
   public function init()
   {
    // Set the method for the display form to POST
     $this->setMethod('post');
         $this->setElementDecorators(array(
                    'ViewHelper',
                    array('HtmlTag',array('tag' =>'div' ,'class'=>'field')),
                    array('Label',array('tag' =>'div','class'=>'label')),
                ));

    // Add an email element
    $this->addElement('text','name',array('label'=>'Name:',
            'required'=>true,


    $this->addElement('text','username',array('label'=>'User Name:','id'=>'user_name',
            'required'=>true,

            ));

    $this->addElement('password','password',array('label'=>'Password:',
                    'required'=>true,

                    ));

    $this->addElement('password','cpassword',array('label'=>'Password Again:',
                    'required'=>true,

                    ));

    $this->addElement('text','phone',array('label'=>'Phone:',
                    'required'=>true,

                    ));

    $this->addElement('text', 'email', array(
                        'label'      => 'Email:',
                         'value'     =>'test',


                        ));
    $this->addElement('file', 'photo', array(
                        'label'      => 'Profile Photo:',
                        'decorators' =>array('file',array('HtmlTag',array('tag'=>'div','class'=>'field'))
                                            ,array('Label',array('tag'=>'div','class'=>'label')))
                        ));

    $this->addElement('submit', 'save',array('label'=>'Register Me','class'=>'submitbtn','style'=>'margin-left:150px;'));



}

?>

Ben bu cezayı çalışacak umut