Forms ZF2表单可更改多个参数

Forms ZF2表单可更改多个参数,forms,zend-framework2,Forms,Zend Framework2,以ZF2相册模块为例,如何创建一个要放置在索引视图上的表单,以便能够通过两个或多个参数过滤记录?假设数据有一个genre列和year列,我们希望索引视图有一个包含两个相应select元素的表单。表单是一个简单的表单,所以我们不需要提交按钮;相反,我们希望用户选择触发表单操作。控制器根据路由器的输入设置$genre filter和$year,这些值1)过滤发送到视图的数据,2)设置表单中select元素的“selected”选项 我该如何做到这一点?我有许多问题找不到相关信息: 如何使select

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

我该如何做到这一点?我有许多问题找不到相关信息:

  • 如何使select元素触发表单操作?在HTML中,这是通过添加
    onchange='this.form.submit()'
    到select标记。我如何在ZF2中实现它

  • 如何指示select元素中的哪些选项是 “选定”(当前默认)选项?在HTML中,这是通过添加
    “已选择”
    到选项标记。我如何在ZF2中实现它

  • 如何编写表单动作脚本

  • 以下是我目前掌握的情况:

    // 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 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。如何使选择元素触发表单操作?在HTML中,这是通过向select标记添加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.如何指示选择元素中的哪些选项是“选定”(当前默认)选项?在HTML中,这是通过向选项标记添加“selected”来完成的。我如何在ZF2中实现它

    3.如何编写表单动作脚本

    这实际上取决于您已经如何加载数据,但是如果您在这方面有任何具体问题,也许我们可以提供帮助

    if (document.getElementById('event-filter')) {
        $('#event-filter select').change(function(e) {
            $('#event-filter').submit();
        });
    }
    
    $form = new Form('event-filter');
    $form->setData(array(
        'genre' => 'jazz',
        'year' => '2002'
    ));