ZF2表单改变多个参数

时间:2014-04-21 18:41:50

标签: forms zend-framework2

使用ZF2相册模块作为示例,如何创建要放置在索引视图上的表单,该表单能够通过两个或多个参数过滤记录?假设数据有一个genre列和year列,我们希望索引视图有一个带有两个相应select元素的表单。表单是一个简单的表单,所以我们不需要提交按钮;相反,我们希望用户选择触发表单操作。控制器根据路由器的输入设置$genre-filter$year,这些值1)过滤发送到视图的数据,2)设置select元素的'selected'选项形式。

我该如何实现?我有一些问题无法找到相关信息:

  1. 如何让select元素触发表单操作?在HTML中,这是通过添加来完成的 onchange='this.form.submit()'到select标记。我如何在ZF2中做到这一点?

  2. 如何指示select元素中的哪个选项 '已选中'(当前默认值)选项?在HTML中,这是通过添加来完成的 'selected'到选项标记。我如何在ZF2中做到这一点?

  3. 如何编写表单操作脚本?

  4. 这是我到目前为止所拥有的:

    // in the controller:
    
    use Zend\Form\Element;
    use Zend\Form\Form;
    
    // ... //
    
    $genre-filter = $this->getEvent()->getRouteMatch()->getParam('genre');
    $year-filter  = $this->getEvent()->getRouteMatch()->getParam('year');
    
    // ... //
    
    $genre = new Element\Select('genre');
    $genre->setValueOptions(array(
       'all' => 'all',
       'jazz' => 'jazz',
       'punk' => 'punk',
       'emo' => 'emo',
       // ... //
    ));
    
    $year = new Element\Select('year');
    $year->setValueOptions(array(
       'all' => 'all',
       '2001' => '2001',
       '2002' => '2002',
       '2003' => '2003',
    ));
    
    $form = new Form('event-filter');
    $form->add($genre);
    $form->add($year);
    

    // in the view script:
    
    echo $this->form()->openTag($form);
    echo "genre: " . $this->formSelect($genre);
    echo "year: " . $this->formSelect($year);
    echo $this->form()->closeTag();
    

    我假设表单操作是这样写的:

    // in the controller:
    
    $genre-selection = $this->getRequest()->getPost('genre', 'all');
    $year-selection  = $this->getRequest()->getPost('year', 'all');
    
    return $this->redirect()->toRoute('albums', array('action'=>'index', 'genre' => $genre-selection, 'year' => $year-selection);
    

1 个答案:

答案 0 :(得分:1)

  

1。如何让select元素触发表单操作?在HTML中,这是通过添加onchange =' this.form.submit()'来完成的。到选择标签。我如何在ZF2中做到这一点?

您可以在定义各个表单元素时为其指定属性:

$genre = new Element\Select('genre');
$genre->setAttributes(array(
    'onchange' => 'this.form.submit();'
));

然而,最好从HTML中完全删除它并且不引人注意地执行此操作。添加到您的JS文件:

if (document.getElementById('event-filter')) {
    $('#event-filter select').change(function(e) {
        $('#event-filter').submit();
    });
}
  

2. 如何指出select元素中的哪个选项是“selected”(当前默认值)选项?在HTML中,这是通过添加' selected'来完成的。到选项标签。我如何在ZF2中做到这一点?

$form = new Form('event-filter');
$form->setData(array(
    'genre' => 'jazz',
    'year' => '2002'
));
  

3. 如何编写表单操作脚本?

这实际上取决于您如何加载数据,但如果您遇到任何具体问题,我们可能会提供帮助。