2015-02-07 54 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团队的主要开发人员正在称重。

相关问题