【发布时间】:2014-04-21 18:41:50
【问题描述】:
以 ZF2 相册模块为例,我如何创建一个放置在索引视图上的表单,该表单能够通过两个或多个参数过滤记录?假设数据有一个genre 列和year 列,我们希望索引视图有一个带有两个对应选择元素的表单。表单是一个简单的表单,所以我们不需要提交按钮;相反,我们希望用户选择触发表单操作。控制器根据来自路由器的输入设置$genre-filter 和$year,这些值1) 过滤发送到视图的数据,2) 在表单中设置选择元素的“已选择”选项。
我该如何做到这一点?我有很多问题找不到相关信息:
如何让选择元素触发表单动作?在 HTML 中,这是通过添加
onchange='this.form.submit()'到选择标签。在 ZF2 中怎么做?如何指示选择元素中的哪些选项是 “选择”(当前默认)选项?在 HTML 中,这是通过添加
'selected'到选项标签。在 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 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