2013-09-27 16 views
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.

+0

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. –

Odpowiedz

Powiązane problemy