2011-06-11 8 views
1

폼을 생성하기 위해 나는 this 스레드를 따르고 있으며, 폼 요소의 개수가 알려지면 작동합니다. 이제 사용자 선택에 따라 양식 필드를 만들어야합니다.젠드에서 폼을 생성하는 방법

예를 들어

:

<?php 

class Form_MyForm extends Zend_Form { 

    public function __construct($options = null) { 

     parent::__construct($options); 

     // Set the method for the display form to POST 
     $this->setMethod('post'); 

     $elements = array(); 

     // Get user input to create elements 
     $fields = $options['columns']; 

     // Create form elements 
     for($i = 0; $i < count($fields); $i++) { 
      $element = $this->CreateElement('text', 'field'.$i); 
      $element->setLabel($fields[$i]['name']); 
      $elements[] = $element; 
     } 

     $this->addElements($elements); 
     $this->setElementDecorators(array('ViewHelper')); 
     $this->setDecorators(array(array('ViewScript', array('viewScript' => 'myform-form.phtml')))); 

    } // end construct 


} // end class 
?> 

I can render each element separately을하지만 지금은 루프에 의해 myForm을-form.phtml에서 이러한 요소를 렌더링하는 방법을 모르겠어요. 번호 필드가 시작 부분에 알려져 있지 않기 때문에 나는 .. 루프로 시작하는

감사

+0

양식해야이 같은 것을 (그것을 테스트하지 않았다)를 사용한다 코드를 다른 메소드로 옮겨야하고 ('configureForm()'), 필드 수와 함께 인수를 받아 들여야합니까? – netcoder

+0

'$ columns' 변수는 무엇입니까? 생성 된 곳이 보이지 않습니다. – Marcin

+0

@Marcin : 죄송합니다. 실제로는 ** $ field ** 배열입니다. 여기에는 양식 필드의 레이블이 들어 있습니다. 예를 들어'array ('FirstName' , '성', '생년월일'); '질문을 다시 검토하십시오. 감사 – Student

답변

1

<? 
foreach ($this->element->getElements() as $element){ 
    echo $this->{$element->helper}(
     $element->getName(), 1, $element->getAttribs() 
    ) 
} 
?> 

$this->element 내가 아니에요 정확히 Zend_Form의 대단한 (나는 실제로 그것을 싫어),하지만 어쩌면 당신을

0

사이드 노트를 가지고 : 그것은 양식 생성자를 오버라이드 (override)보다는 init() 방법에있는 모든이 작업을 수행하는 전형적인입니다. 그러나 그것은 큰 문제가 아닙니다.

재 : 당신은 당신이 필드를 만드는 데 사용되는 루프 유사한 요소를 렌더링하는 foreach 루프를 수행 한 후 $this->getOption('columns')를 호출 할 수처럼 myform-form.phtml에서 보인다 다음 ViewScript 장식의보기 스크립트를 사용하여 필드의 렌더링.

관련 문제