我在zf2 github上写过它,但还没有人回答。但也许这不是一个错误,我做错了什么。这是我的代码:
字段集
class TestFieldset extends Fieldset implements
InputFilterProviderInterface
{
public function __construct($name)
{
parent::__construct($name);
$this->add(array(
'type' => 'text',
'name' => 'test'
));
}
public function getInputFilterSpecification() {
return array(
'test' => array(
'filters' => array(
array('name' => 'StringTrim')
),
'validators' => array(
array('name' => 'NotEmpty')
)
)
);
}
}
形式
class TestForm extends Form
{
public function __construct($name = null, $options = array()) {
parent::__construct($name, $options);
$fieldset = new TestFieldset('test-fieldset');
$this->add($fieldset);
}
}
控制器动作
public function indexAction()
{
$form = new \CRM\Form\TestForm;
$form->setData(array('test-fieldset' => array('test' => 'test value')));
$form->isValid();
$inputFilter = $form->getInputFilter()
->get('test-fieldset')
->get('test');
$filters = $inputFilter->getFilterChain()
->getFilters();
$validators = $inputFilter->getValidatorChain()
->getValidators();
var_dump($filters);
var_dump($validators);
}
结果
object(Zend\Stdlib\PriorityQueue)[678]
protected 'queueClass' => string 'Zend\Stdlib\SplPriorityQueue' (length=28)
protected 'items' =>
array (size=2)
0 =>
array (size=2)
'data' =>
object(Zend\Filter\StringTrim)[682]
...
'priority' => int 1000
1 =>
array (size=2)
'data' =>
object(Zend\Filter\StringTrim)[693]
...
'priority' => int 1000
protected 'queue' =>
object(Zend\Stdlib\SplPriorityQueue)[683]
protected 'serial' => int 2147483645
array (size=2)
0 =>
array (size=2)
'instance' =>
object(Zend\Validator\NotEmpty)[686]
protected 'constants' =>
array (size=13)
...
protected 'messageTemplates' =>
array (size=2)
...
protected 'options' =>
array (size=1)
...
protected 'value' => string 'test value' (length=10)
protected 'abstractOptions' =>
array (size=7)
...
'breakChainOnFailure' => boolean false
1 =>
array (size=2)
'instance' =>
object(Zend\Validator\NotEmpty)[697]
protected 'constants' =>
array (size=13)
...
protected 'messageTemplates' =>
array (size=2)
...
protected 'options' =>
array (size=1)
...
protected 'value' => string 'test value' (length=10)
protected 'abstractOptions' =>
array (size=7)
...
'breakChainOnFailure' => boolean false
如您所见,有两个 StringTrim 过滤器和两个 NotEmpty 验证器。这很烦人,尤其是当我使用 File\RenameUpload 过滤器并且它试图重命名和移动已经重命名的文件时。