2011-05-15 6 views
2

나는 다음과 같은 양식을 만들었습니다보기에서 양식 요소를 렌더링하는 방법은 무엇입니까?

class Form_Login extends Zend_Form { 

    public function __construct() { 

     $this->setMethod('post'); 
     $elements = array(); 

     // username 
     $element = $this->addElement('text', 'username', array('label' => 'Username')); 
     $elements[] = $element; 

     // password 
     $element = $this->addElement('password', 'password', array('label' => 'Password')); 
     $elements[] = $element; 

     // submit 
     $element = $this->addElement('submit', 'submit', array('label' => 'Login')); 
     $elements[] = $element; 

     $this->addElements($elements); 
     $this->addDecorator('ViewHelper'); 
     $this->setDecorators(array(array('ViewScript', array('viewScript' => 'authentication/login-form.phtml')))); 
    } 
} 

이제 로그인-form.phtml 파일에이 같은 요소 렌더링 :

Fatal error: Call to a member function getElement() on a non-object in 
/var/www/student/application/views/scripts/authentication/login-form.phtml on line 5 
: 그것은 나에게 다음과 같은 오류를 제공

<form action='submitlogin' method='post' id='loginform'> 

Login Form 

<?= $this->form->getElement('username'); ?> 
<?= $this->form->getElement('password'); ?> 

</form> 

외부 스크립트에서 요소를 렌더링하는 방법 ...

답변

3

이 같은 뷰 스크립트에서 요소를 호출 할 수 있습니다

<?= $this->element->username ?> 

을 특정 요소의 구성 요소의 경우는 다음 것들을 사용할 수 있습니다

양식 클래스 :

여기
<? $el = $this->element->username; ?> 
<label><?= $el->getLabel() ?></label> 
<?= $this->formText($el->getName(), $el->getValue(), $el->getAttribs()) ?> 
+0

일 확인. 위의 대답과 함께 레이블 및 텍스트 필드를 렌더링합니다. 레이블과 텍스트 필드를 어떻게 별도로 렌더링 할 수 있습니까? 감사합니다 – Student

+0

@ 학생, 내 변경 사항을 참조하십시오. – pltvs

+1

$ this-> element-> username의 'element'는 실제 요소가 아니라 양식 객체를 참조합니다. $ this-> element-> username은 Form_Element 객체를 참조합니다. 약간의 코딩 규칙. – Martijn

2

내 완벽한 솔루션입니다 in 로그인 .php :

class Form_Login extends Zend_Form { 

    /** 
    * Constructor 
    */ 
    public function __construct($options = null) { 

     parent::__construct($options); 

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

     $elements = array(); 

     $element = $this->CreateElement('text', 'username'); 
     $element->setLabel('Username'); 
     $elements[] = $element; 

     $element = $this->CreateElement('password', 'password'); 
     $element->setLabel('Password'); 
     $elements[] = $element; 

     $element = $this->CreateElement('submit', 'submit'); 
     $element->setLabel('Login'); 
     $elements[] = $element; 

     $this->addElements($elements); 

     $this->setElementDecorators(array('ViewHelper')); 

     $this->setDecorators(array(array('ViewScript', array('viewScript' => 'authentication/login-form.phtml')))); 

    } // end construct 


} // end class 

로그인-form.phtml

<form action=<?= $this->element->getAction() ?> method=<?= $this->element->getMethod() ?> > 


<table> 
    <tr> 
     <td><label><?= $this->element->username->getLabel() ?></label></td> 
     <td><?= $this->element->username; ?></td> 
    </tr> 
    <tr> 
     <td><label><?= $this->element->password->getLabel() ?></label></td> 
     <td><?= $this->element->password; ?></td> 
    </tr> 
</table> 

</form> 
관련 문제