【问题标题】:ZF2 refresh input filter after dynamicly adding elements to formZF2 动态添加元素到表单后刷新输入过滤器
【发布时间】:2013-06-03 12:17:26
【问题描述】:
我有一个表单,它在__construct 方法中触发事件以从其他模块加载一些项目。到目前为止一切顺利,从另一个模块加载了一个字段集并添加到表单中,在 request->getPost() 我有字段集中元素的数据,但 $form->getData() 没有字段集的数据.
我在将此字段集添加到表单之前调用$form->getInputFilter(),似乎调用$form->getInputFilter() 不会为新添加的元素创建过滤器。那么如何在不重新创建孔过滤器的情况下为动态事件创建输入过滤器呢?
或者我应该延迟调用$form->getInputFilter(),直到所有元素都添加到表单中?
【问题讨论】:
标签:
forms
dynamic
zend-framework2
zend-inputfilter
【解决方案1】:
后来我还在表单中添加了一些被输入过滤器忽略的元素。
我的解决方案很可能不是最好的解决方案,但由于您还没有收到任何其他答案,所以我这样做了:
我添加了
use Zend\InputFilter\Factory as InputFactory;
在我验证表单数据然后使用的类中
$factory = new InputFactory();
$form->getInputFilter()->add($factory->createInput(array(
'name' => 'title_str',
'required' => true,
'filters' => array(
array('name' => 'Int'),
),
)));
【解决方案2】:
@Afterdark017 有效,而且我认为可以重置过滤器。
protected function resetFilters(){
$this->filter = null;
$this->hasAddedInputFilterDefaults = false;
}
但我还没有测试过。