2013-09-27 13 views
5

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.

+0

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

risposta

Problemi correlati