0

Я написал несколько InputFilters. Теперь я wanne фильтровать и проверять форму с несколькими из них. Так я думал, что я могу написать новый InputFilter добавить все остальные мне нужно в строителю и установить этот новый в форме, но работа ^^ доцент вот мой код:

образец InputFilterZend Framework 2 - InputFilter add InputFilter

class MyEmailFilter extends InputFilter 
{ 
    protected $config = array(
     array(
      'name'   => 'email', 
      'required'  => true, 
      'allow_empty' => false, 
      'validators' => array(
       array(
        'name' => 'NotEmpty', 
        'options' => array(
         'messages' => array(
          NotEmpty::IS_EMPTY => 'Please type in your emailaddress.', 
         ) 
        ), 
        'break_chain_on_failure' => true, 
       ), 
       array(
        'name' => 'EmailAddress', 
        'break_chain_on_failure' => true, 
       ), 
      ), 
     ), 
    ); 

    public function init() 
    { 
     foreach ($this->config as $name => $input) { 
      if (is_string($name)) { 
       $this->add($input, $name); 
      } else { 
       $this->add($input); 
      } 
     } 
    } 
} 


мой конфиг:

return array(
    'input_filters' => array(
     'invokables' => array(
      'member.myemailfilter' => 'Member\InputFilter\MyEmailFilter', 
     ), 
     'factories' => array(
      'member.registerfilter' => 'Member\InputFilter\Service\RegisterFilterFactory', 
     ), 
     'shared'  => array(
      'common.myemailfilter' => true, 
      'member.registerfilter' => true, 
     ), 
    ), 
); 


моя фабрика:

class RegisterFilterFactory implements FactoryInterface 
{ 
    public function createService(ServiceLocatorInterface $inputFilterPluginManager) 
    { 
     /** @var ServiceLocatorInterface $serviceLocator */ 
     $serviceLocator = $inputFilterPluginManager->getServiceLocator(); 

     /** @var MyEmailFilter $emailFilter */ 
     $emailFilter = $serviceLocator->get('InputFilterManager')->get('member.myemailfilter'); 

     return new RegisterFilter($emailFilter); 
    } 
} 


RegisterInputFilter (здесь я WANNE добавить все что мне нужно для вида):

class RegisterFilter extends InputFilter 
{ 
    public function __construct(InputFilter $myEmailFilter) 
    { 
     $this->add($myEmailFilter, 'email'); 
    } 
} 


теперь добавляют фильтр к форме в моей registercontroller:

class RegisterController extends AbstractActionController 
{ 
    /** 
    * registrierungszeuch 
    */ 
    public function indexAction() 
    { 
     if ($this->getAuthService()->hasIdentity()) { 
      return $this->redirect()->toRoute('home'); 
     } 

     $form = $this->getRegisterForm(); 

     if ($this->request->isPost()) { 
      $form->setData($this->params()->fromPost()); 
      $form->setInputFilter($this->getRegisterFilter()); 
      if ($form->isValid()) { 
       var_dump('valide'); 
      } else { 
       var_dump('invalide'); 
      } 
     } 

     $viewModel = new ViewModel(); 

     $viewModel 
      ->setVariable('form', $form); 

     return $viewModel; 
    } 

    /** 
    * @return Form 
    */ 
    private function getRegisterForm() 
    { 
     return $this->getServiceLocator()->get('FormElementManager')->get('form.user.register'); 
    } 

    /** 
    * @return RegisterFilter 
    */ 
    private function getRegisterFilter() 
    { 
     return $this->getServiceLocator()->get('InputFilterManager')->get('member.registerfilter'); 
    } 
} 



, когда я прямо добавляю myEmailFilter в форму, он работает, если i добавить registerfilter, я получаю исключение

[[Дополнительная информация]]: Zend \ InputFilter \ Exception \ InvalidArgumentException [[Файл]]: /дома/бродяга/проект/продавец/ZendFramework/ZendFramework/библиотека/Zend/InputFilter/BaseInputFilter.php: 137 [[Сообщение]]: Zend \ InputFilter \ BaseInputFilter :: setData ожидает массив или аргумент Traversable; полученная строка [[Stack trace]]: # 0 /home/vagrant/project/vendor/zendframework/zendframework/library/Zend/InputFilter/BaseInputFilter.php(535): Zend \ InputFilter \ BaseInputFilter-> setData ('') # 1 /home/vagrant/project/vendor/zendframework/zendframework/library/Zend/InputFilter/BaseInputFilter.php(147): Zend \ InputFilter \ BaseInputFilter-> populate() # 2/home/vagrant/project/поставщик/zendframework/zendframework/library/Zend/Form/Form.php (467): Zend \ InputFilter \ BaseInputFilter-> setData (Array) # 3/home/vagrant/project/module/Member/src/Controller/RegisterController. php (29): Zend \ Form \ Form-> isValid() # 4 /home/vagrant/project/vendor/zendframework/zendframework/library/Zend/Mvc/Controller/AbstractActionController.php(83): Member \ Controller \ RegisterController-> indexAction() # 5 [in ternal function]: Zend \ Mvc \ Controller \ AbstractActionController-> onDispatch (Object (Zend \ Mvc \ MvcEvent)) # 6 /home/vagrant/project/vendor/zendframework/zendframework/library/Zend/EventManager/EventManager.php (468): call_user_func (Array, Object (Zend \ Mvc \ MvcEvent)) # 7 /home/vagrant/project/vendor/zendframework/zendframework/library/Zend/EventManager/EventManager.php(207): Zend \ EventManager \ EventManager -> triggerListeners ('dispatch', Object (Zend \ Mvc \ MvcEvent), Object (Closure)) # 8 /home/vagrant/project/vendor/zendframework/zendframework/library/Zend/Mvc/Controller/AbstractController.php (117): Zend \ EventManager \ EventManager-> trigger ('dispatch', Object (Zend \ Mvc \ MvcEvent), Object (Closure)) # 9/home/vagrant/project/vendor/zendframework/zendframework/library/Zend/Mvc/DispatchListener.php (114): Zend \ Mvc \ Controller \ AbstractController-> dispatch (Object (Zend \ Http \ PhpEnvironment \ Request), Object (Zend \ Http \ PhpEnvironment \ Response)) # 10 [внутренняя функция]: Zend \ Mvc \ DispatchListener-> onDispatch (Object (Zend \ Mvc \ MvcEvent)) # 11 /home/vagrant/project/vendor/zendframework/zendframework/library/Zend/EventManager/EventManager.php(468): call_user_func (массив, объект (Zend) \ Mvc \ MvcEvent)) # 12 /home/vagrant/project/vendor/zendframework/zendframework/library/Zend/EventManager/EventManager.php(207): Zend \ EventManager \ EventManager-> triggerListeners ('dispatch', Object (Zend \ Mvc \ MvcEvent), Object (Closure)) # 13 /home/vagrant/project/vendor/zendframework/zendframework/library/Zend/Mvc/Application.php(309): Zend \ EventManager \ EventManager-> триггер («Отправка», Объект (Zend \ Mvc \ MvcEvent), Объект (Закрытие)) # 14/home/vagrant/project/public/ind ex.php (17): Zend \ Mvc \ Application-> run() # 15 {main}


Как я могу сшить отдельные фильтры в правильном направлении? подумал, что функция add() также принимает InputFilters, но выглядит dosent.

ТНХ помощи :-)

ответ

Смежные вопросы