Как использовать InputFilterManager для создания пользовательских InputFilters в Zf2

Документация ZF2 гласит следующее:

InputFilterManager, сопоставление с Zend \ Mvc \ Service \ InputFilterManagerFactory. Это создает и возвращает экземпляр Zend \ InputFilter \ InputFilterPluginManager, который может использоваться для управления и сохранения экземпляров входных фильтров.

У меня есть собственный класс входных фильтров zf2, и я добавляю фильтры и валидаторы внутри метода init (), например:

namespace Application\Filter; use Zend\InputFilter\InputFilter; class GlassFilter extends InputFilter { public function init() { $this->add(array( 'name' => 'glassname', 'required' => true, 'filters' => array( array('name' => 'StringToUpper'), ), 'validators' => array( array( 'name' => 'StringLength', 'options' => array('min' => 3), ), )); } 

Также я добавил следующий ключ к моему module.config.php

 'filters' => array( 'invokables' => array( 'glassfilter' => '\Application\Filter\GlassFilter', ), ), 

Мой вопрос в том, как я могу построить свой GlassFilter с помощью InputFilterManager ? Правильно ли это? Я нашел эту ветку, но я хочу понять взаимосвязь между пользовательскими InputFilters и InputFilterManager.

Solutions Collecting From Web of "Как использовать InputFilterManager для создания пользовательских InputFilters в Zf2"

Хорошо, проведя 3 кровавых часа (благодаря невероятной (!) Документации), я понял это. Я пишу свое решение в качестве ответа, надеюсь, это поможет другим, кто хочет написать свои собственные входные фильтры.

  1. Вы должны зарегистрировать свой собственный входной фильтр в module.config.php с помощью ключевого module.config.php input_filters , а не фильтра, фильтров, filter_manger, filtermanager и т. Д.
  2. Расширьте по умолчанию Zend\InputFilter\InputFilter при написании собственного GlassFilter .
  3. Напишите свои фильтры внутри метода init() GlassFilter , а не в __constructor() . Он будет вызываться автоматически после строительства.
  4. Затем получите его в любом месте через inputfiltermanager , а не servicemanager напрямую.

Пример конфигурации:

 'input_filters' => array( 'invokables' => array( 'glassfilter' => '\Application\Filter\GlassFilter', ), ), 

Пример использования:

 $glassfilter = $serviceLocator->get('InputFilterManager')->get('glassfilter');