2012-08-09 91 views
3

創建登錄表單和d加入UserController->在loginAction:Zend框架:添加形式佈局

public function loginAction() { 
    $form = new Application_Form_Login(); 

    $this->view->loginForm = $form; 
} 

如何添加我的形式佈局/腳本/ header.phtml,因爲我試試這個,但不工作:

<?php echo $this->loginForm ?> 

如果我在views/scripts/user/login.phtml中回顯窗體,我會看到登錄窗體。

這是我的登錄表單:

class Application_Form_Login extends Zend_Form { 

public function init() { 
    $this->setDecorators(array('FormElements', 'Form')) 
      ->setAction("/user/login/"); 

    $username = new Zend_Form_Element_Text(array('name' => 'username', 'class' => 'input-text')); 
    $username->setRequired(true) 
      ->setDecorators(array('ViewHelper',)); 

    $this->addElements(array($username)); 
} 

} 
+4

什麼結束了工作?你可以把你的解決方案作爲答案,然後接受它,而其他人也可以贊成它。 – drew010 2012-08-10 01:20:53

回答

1

由於佈局是從您的視圖對象分開,你需要的形式分配給佈局。

在你的控制器:

public function loginAction() 
{ 
    $form = new Application_Form_Login(); 

    // assign the form to the layout 
    $this->_helper->layout()->loginForm = $form; 
} 

在您的佈局:

<?php if ($this->layout()->loginForm): ?> 
    <?php echo $this->layout()->loginForm; ?> 
<?php endif; ?> 

試試這個:

// in controller: 
$form = new Application_Form_Login(); 
$this->view->placeholder('loginForm')->set($form); 

--------------- 

// in layout script: 
$form = $this->placeholder('loginForm'); 
if ($form instanceof Zend_Form) { 
    echo $form; 
} 
+0

好的,我嘗試了這個,沒有看到任何形式 – Defense 2012-08-09 23:01:10

+0

佈局只是一個佔位符,所以如果你從你的控制器或視圖中指定了一些東西,它應該在佈局本身中可用。以上代碼適用於ZF 1.11.11和1.11.12 – drew010 2012-08-09 23:06:58

+0

嗯我使用ZF 1.11.12-minimal – Defense 2012-08-09 23:09:17

1

您正在尋找渲染功能:

<?php 
    echo $this->loginForm->render(); 
?> 
+0

有錯誤:在非對象上調用函數render() – Defense 2012-08-09 23:03:08

+0

'__toString()'方法呈現表單,因此可以按照在問題中所做的那樣回顯它。無需直接調用渲染。 – drew010 2012-08-09 23:09:39