2014-07-03 35 views
0

對我是新來的Zend Framework 2Zend的2 - 表格每

我想一個形式添加到每個頁面(例如登錄框),其功能如同它在自己的模塊,即當。因此它會進行驗證,並且在操作之後不需要從模塊重新定向。

我已經看過了各種東西,如視圖助手和動作助手,我還沒有發佈任何代碼,因爲它可能只是添加混亂

我正在尋找關於如何實現這一目標,我現在很困惑的指南至於如何最好地實現這一點

+0

你看過部分助手嗎? http://framework.zend.com/manual/2.1/en/modules/zend.view.helpers.partial.html –

+0

感謝您的回覆。是的,似乎部分幫手只處理模板,所以不是前進的方向。由於我對Zend的無知,我可能會完全錯誤地接近它。在我看來,我應該能夠擁有一個登錄模塊並在全球範圍內使用它,也許不是? – user1298511

回答

1

這當然是一個視圖助手的用例。這提供了一個邏輯在不同模塊的多個視圖中可重用的邏輯。

以例如登錄表單爲例。當您調用助手時,您可能想要返回Zend\Form\Form實例。因此,首先創建幫助:

'view_helpers' => [ 
    'invokables' => [ 
     'loginForm' => 'MyLogin\View\Helper\LoginForm', 
    ], 
], 

現在你可以使用助手在你的看法:

namespace MyLogin\View\Helper; 

use Zend\View\Helper\AbstractHelper; 
use Zend\Form\Form; 

class LoginForm extends AbstractHelper 
{ 
    public function __invoke() 
    { 
     $form = new Form; 
     $url = $this->getView()->url('user/login'); 
     $form->setAttribute('action', $url); 

     $form->add([ 
      'name' => 'username', 
     ]); 
     $form->add([ 
      'type' => 'password', 
      'name' => 'password', 
     ]); 

     return $form; 
    } 
} 

然後你在你的配置寄存器的名義下「登錄表單」這一觀點幫手

<?php $form = $this->loginForm() ?> 
<?= $this->form()->openTag($form)?> 
    <?= $this->formRow($form->get('username'))?> 
    <?= $this->formRow($form->get('password'))?> 
    <button type="submit" value="Login"> 
<?= $this->form()->closeTag()?> 

當然你也可以在你的應用形式的任何登錄,無論你需要能重複使用:

  1. 返回一個形式實例,以便您的視圖可以呈現形式
  2. 返回渲染視圖已經在助手讓你的看法並不需要渲染
  3. 將所有種類的選擇,形式