2015-02-07 25 views
0

我已將一個小表單添加到索引視圖以允許用戶過濾數據。我在控制器中放置了下面的表單代碼,但我質疑這是否是放置它的正確位置。將濾鏡表單代碼放在zf2 MVC模式中的位置

// ... 

public function indexAction() 

    // ... 

    // build group list 
    $groupList = array(
     0 => 'all', 
     1 => 'short people', 
     2 => 'tall people', 
     3 => 'fun people', 
     4 => 'boring people', 
    ); 

    // create group selection box 
    $groupSelect = new Element\Select('group'); 
    $groupSelect->setValueOptions($groupList); 
    $groupSelect->setAttributes(array(
     'onChange' => 'this.form.submit()', 
    )); 

    // create filter form 
    $form = new Form('group-filter'); 
    $form->add($groupSelect); 
    $form->setData(array(
     'group' => $group, 
    )); 

    // process the form 
    $request = $this->getRequest(); 
    if ($request->isPost()) { 
     $groupSelection = $request->getPost('group', 0); 
     return $this->redirect()->toRoute('admin-members', array('group'=>$groupSelection,)); 
    } 

    // ... 

遵循MVC模式,所有這些代碼都屬於控制器嗎?

回答

0

不,它不屬於控制器。創建一個新的表單類(擴展Zend\Form\Form)並注入控制器類。您可以通過控制器工廠,通過工廠類或匿名函數「工廠」來實現。

其他方法是從服務管理器獲取它(您創建的表單)在控制器中,但據我所知,這不是推薦的方法,即使它仍然在ZF2 docs中。

這樣,你的表單代碼將與控制器代碼分離,而不是與實際的控制器邏輯混合,在前一種情況下,也更容易測試。

你可以從這個ZF2論壇thread瞭解更多。它很長,但是有代碼示例和來自ZF2團隊的主要開發人員正在稱重。

相關問題