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