5
Napisałem o tym na zf2 github i nikt jeszcze nie odpowiedział. Ale może to nie jest błąd i robię coś złego. Tu jest mój kodu:Filtry i weryfikatory są dodawane dwukrotnie:
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')
)
)
);
}
}
Formularz
class TestForm extends Form
{
public function __construct($name = null, $options = array()) {
parent::__construct($name, $options);
$fieldset = new TestFieldset('test-fieldset');
$this->add($fieldset);
}
}
działanie kontrolera
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);
}
Wynik
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
Jak widać, istnieją dwa filtry StringTrim i dwa walidatory NotEmpty. Jest to denerwujące, szczególnie gdy używam filtru File \ RenameUpload i próbuję zmienić nazwę i przenieść już zmieniony plik.
nie można znaleźć gdzie jest powielenie filtry wejściowe i weryfikatorów, ale spróbuj usunąć function 'getInputFilterSpecification()' z TestFieldset i zrobić to w jego konstrukcji: $ this-> add (array ( 'type' => 'text', 'name' => 'test', 'filters' => array ( array ('name' => 'string_trim'), ) , 'tablica walidatorów' => (tablica ('nazwa' => 'not_empty'), ), )); Niż sprawdź, czy nadal duplikuje. –