在zf2 MVC模式中放置过滤器表单代码的位置

时间:2015-02-07 17:36:10

标签: model-view-controller zend-framework2

我在索引视图中添加了一个小表单,以允许用户过滤数据。我在控制器内部放置了以下代码,但我怀疑这是否适合放置它。

// ...

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模式,所有这些代码都属于控制器吗?

1 个答案:

答案 0 :(得分:0)

不,它不属于控制器。创建一个新的表单类(扩展Zend\Form\Form)并注入控制器类。您可以通过控制器工厂,通过工厂类或匿名功能" factory"来实现。

其他方法是从服务管理器获取它(你创建的表单)在控制器中,但据我所知,不再是推荐的方法,即使它仍然在ZF2 docs

这样你的表单代码将与控制器代码分开,而不是与实际的控制器逻辑混合,在前一种情况下,也更容易测试。

您可以从此ZF2论坛thread了解更多信息。它很冗长,但有代码样本和ZF2团队的主要开发人员正在努力。