Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZendFramework] Zamiana zrenderowanego formualrza na tablicę
Forum PHP.pl > Forum > PHP > Frameworki
padalec83
Witam,
poszukuję jakiejś szybkiej metody na całkowite usunięcie domyślnego decorataroa z Zend_Form i zamianę na tablicę asocjacyjną. Jak na razie udało mi się zrobić coś takiego:
  1. public function renderToArray(){
  2. $this->setDisableLoadDefaultDecorators( false );
  3. $aFormArray['method'] = $this->getMethod();
  4. $aFormArray['action'] = $this->getAction();
  5. $aFormArray['enctype'] = $this->getEnctype();
  6.  
  7. $i=0;
  8. foreach ($this->getElements() as $sKey => $oElement) {
  9. $aFormArray['elements'][$i]['label'] = $oElement->getLabel();
  10. $aFormArray['elements'][$i]['name'] = $oElement->getName();
  11. $i++;
  12. }
  13.  
  14. return $aFormArray;
  15. }

nie wiem której metody trzeba użyć aby dostać dany element w postaci htmla a mianowicie np jak mamy element text czyli <input type="text" id="" /> itd.

Pozdrawiam
tvister
Prosta sprawa musisz wyrzucić wszystkie dekoratory dla elementu oprócz 'Zend_Form_Decorator_ViewHelper'.
..no i zrenderować.
padalec83
zrobiłem coś takiego:
  1. public function renderToArray(){
  2. $this->setDisableLoadDefaultDecorators(true);
  3. $aFormArray = array();
  4. $this->render(new Zend_View());
  5. $aFormArray['method'] = $this->getMethod();
  6. $aFormArray['action'] = $this->getAction();
  7. $aFormArray['enctype'] = $this->getEnctype();
  8. $aFormArray['errors'] = $this->getErrors();
  9.  
  10. $i=0;
  11. foreach ($this->getElements() as $sKey => $oElement) {
  12. $aFormArray['elements'][$i]['label'] = $oElement->getLabel();
  13. $aFormArray['elements'][$i]['name'] = $oElement->getName();
  14. $aFormArray['elements'][$i]['id'] = $oElement->getId();
  15. $aFormArray['elements'][$i]['required'] = $oElement->isRequired();
  16. $aFormArray['elements'][$i]['description'] = $oElement->getDescription();
  17. $aFormArray['elements'][$i]['type'] = strtolower(substr( $oElement->getType(), strrpos($oElement->getType(),'_')+1 , strrpos($oElement->getType(),'_')));
  18. $aFormArray['elements'][$i]['html'] = $oElement->renderViewHelper();
  19. $aFormArray['elements'][$i]['value'] = $oElement->getValue();
  20. $i++;
  21. }
  22.  
  23. return $aFormArray;
  24. }



Teraz mam problem z metodą isValid(), ponieważ jak tylko wchodzę na stronę jeszcze nie klikam submita, a od razu pokazują mi się błędy o nie wprowadzeniu wymaganych pul, oto mój kod:
  1. $oForm = new Form_Community();
  2. $oForm->buildForm();
  3. if($oForm->isValid($_POST)){
  4. $aFormValues = $oForm->getValidValues($_POST);
  5. foreach($oForm->getElements() as $oElement){
  6. $oElement->setValue(null);
  7. }
  8. print_array($aFormValues);
  9. }
  10. $aReturnData['form'] = $oForm->renderToArray($oForm);
  11.  


  1. [php]
  2. class Form_Community extends CMS_Abstract_Form{
  3. public function buildForm(){
  4. $this->setAction('');
  5. $this->setMethod('post');
  6.  
  7. $oComunityName = new Zend_Form_Element_Text('community_name');
  8. $oComunityName->setLabel('Nazwa gminy: ');
  9. $oComunityName->setRequired(true)->addErrorMessage('Pole jest wymagane');
  10. $oComunityName->setAttrib('maxlenght',10);
  11. $this->addElement($oComunityName);
  12.  
  13. $oComunityAdmin = new Zend_Form_Element_Text('community_administrator');
  14. $oComunityAdmin->setLabel('Nazwa zarzadcy drog: ');
  15. $oComunityAdmin->setRequired(true)->addErrorMessage('Pole jest wymagane');
  16. $oComunityAdmin->setAttrib('maxlenght',10);
  17. $oComunityAdmin->setAttrib('classs','input-text');
  18. $this->addElement($oComunityAdmin);
  19. $this->addElement('submit','send',array('label'=>'Wyslij'));
  20. }
  21. }

[/php]
KrzysiekWildfire
ja robię tak:
  1. if ($this->_request->isPost()){
  2. if ($form->isValid($this->_request->getPost())){
  3. ...
  4. }
  5. }

I powinno śmigać
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.