Ho scritto a questo proposito il zf2 github e nessuno ha ancora risposto. Ma forse non è un bug e sto facendo qualcosa di sbagliato. Ecco il mio codice:I filtri e i validatori vengono aggiunti due volte
Fieldset
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')
)
)
);
}
}
Modulo
class TestForm extends Form
{
public function __construct($name = null, $options = array()) {
parent::__construct($name, $options);
$fieldset = new TestFieldset('test-fieldset');
$this->add($fieldset);
}
}
azione di controllo
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);
}
Risultato
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
Come potete vedere, ci sono due filtri StringTrim e due validatori NotEmpty. È fastidioso specialmente quando sto usando il filtro File \ RenameUpload e sta provando a rinominare e spostare il file già rinominato.
Impossibile trovare dove è la duplicazione di filtri di ingresso e validatori, ma provare a rimuovere la funzione 'getInputFilterSpecification()' da TestFieldset e fare questo in esso di costrutto: $ this-> add (array ( 'type' => 'text', 'name' => 'test', 'filters' => array ( array ('name' => 'string_trim'), ) , 'validators' => array ( array ('name' => 'not_empty'), ), )); Controllare se sta ancora duplicando. –