【问题标题】:ZF2 form to change multiple parametersZF2表格更改多个参数
【发布时间】:2014-04-21 18:41:50
【问题描述】:

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

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

  1. 如何让选择元素触发表单动作?在 HTML 中,这是通过添加 onchange='this.form.submit()' 到选择标签。在 ZF2 中怎么做?

  2. 如何指示选择元素中的哪些选项是 “选择”(当前默认)选项?在 HTML 中,这是通过添加 'selected' 到选项标签。在 ZF2 中怎么做?

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

这是我目前所拥有的:

// 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);

【问题讨论】:

    标签: forms zend-framework2


    【解决方案1】:

    1.如何让选择元素触发表单动作?在 HTML 中,这是通过将 onchange='this.form.submit()' 添加到 select 标记来完成的。在 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 中,这是通过将“选定”添加到选项标签来完成的。在 ZF2 中该怎么做?

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

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

    这实际上取决于您如何加载数据,但如果您对此有任何具体问题,也许我们可以提供帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-13
      • 1970-01-01
      • 2015-07-31
      • 2018-06-14
      相关资源
      最近更新 更多