9

ZF2 文档在defult services 文档中说明了以下内容;

InputFilterManager,映射到 Zend\Mvc\Service\InputFilterManagerFactory。这将创建并返回 Zend\InputFilter\InputFilterPluginManager 的一个实例,该实例可用于管理和持久化输入过滤器实例。

我有一个自定义 zf2 inputfilter 类,我在 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',
    ),
),

我的问题是,如何使用InputFilterManager构造我的GlassFilter?这是一个正确的方法吗?我找到了这个线程,但我想了解自定义 InputFilters 和 InputFilterManager 之间的关系。

4

1 回答 1

30

好的,在花了 3 个血腥小时后(感谢令人难以置信的(!)文档),我想通了。我正在编写我的解决方案作为答案,希望它能帮助其他想要编写自定义输入过滤器的人。

  1. 您应该module.config.php通过input_filters顶键注册您的自定义输入过滤器,而不是过滤器、过滤器、过滤器管理器、过滤器管理器等。
  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');
于 2013-05-17T11:31:17.353 回答