2013-09-27 27 views
5

zf2 github hakkında yazdım ve henüz yanıtlanmadı. Ama belki de bir hata değildir ve yanlış bir şey yapıyorum.Filtreler ve doğrulayıcılar iki kez eklenir

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') 
       ) 
      ) 
     ); 
    } 
} 

Formu

class TestForm extends Form 
{ 
    public function __construct($name = null, $options = array()) { 
     parent::__construct($name, $options); 

     $fieldset = new TestFieldset('test-fieldset'); 

     $this->add($fieldset); 
    } 
} 

Kontrolör eylemi

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); 
} 

Sonucu

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 
: İşte benim kodudur

Gördüğünüz gibi, iki StringTrim filtresi ve iki NotEmpty doğrulayıcısı vardır. Özellikle File \ RenameUpload süzgecini kullandığımda ve daha önce yeniden adlandırılmış dosyayı yeniden adlandırıp taşımaya çalışırken can sıkıcı oluyor.

+0

o giriş filtreleri ve doğrulayıcılarını çoğaltarak nerede bulabilirsiniz, ancak TestFieldset gelen ') işlevi' getInputFilterSpecification (kaldırmayı deneyin ve onu en yapı bunu alınamadı: $ bu-> (dizi ( 'türü' => 'metin', 'adı' => 'test', 'filtreler' => dizi ( dizisi (ismini 'ekleme =>) 'string_trim', ) 'validators' => dizi ( dizisi ('name' => 'not_empty'), ), )); Yine de çoğaltma olup olmadığını kontrol edin. –

cevap