通过工厂注册自定义过滤器

时间:2017-02-07 15:13:10

标签: php zend-framework filter zend-framework3 zend-inputfilter

我正在尝试注册我的自定义过滤器并在 getInputFilter()方法中使用,但不断收到错误:

  

在插件管理器中找不到名为“myCustomFilter”的插件   ZendFilterFilterPluginManager

$inputFilter = new \Zend\InputFilter\InputFilter;
$inputFilter->add([
    'name'       => 'inputname',
    'required'   => true,
    'filters'    => [
        [
            'name' => 'myCustomFilter'
        ]
    ],
]);

并在module.config.php中注册

return [
    'filters' => [
        'aliases'   => [
            'myCustomFilter' => Test\Filter\MyCustomFilter::class,
        ],
        'factories' => [
            Test\Filter\MyCustomFilter::class => Test\Filter\MyCustomFilterFactory::class,
        ],
    ],
];

同样在application.config.php我注册了

'modules' => [
    ...
    'Zend\Filter',
    'Zend\InputFilter',
    'Zend\Validator',
 ],

请注意,我使用的是ZF3,还有其他设置/配置吗?

我可以在没有工厂的情况下使用过滤器,但需要通过工厂创建过滤器。

2 个答案:

答案 0 :(得分:0)

您是否在Zend\InputFilter https://github.com/zendframework/ZendSkeletonApplication/blob/master/config/modules.config.php

中加载了modules.config.php

像这样:

return [
    'Zend\Router',
    'Zend\InputFilter',
    'Zend\Validator',
    'Application',
];

答案 1 :(得分:0)

创建InputFilter实例后,我们需要更新默认的FilterManager

$inputFilter->getFactory()->getDefaultFilterChain()->setPluginManager(
    $container->getServiceLocator()->get('FilterManager')
);

当然最好注入“FilterManager”,这只是一个测试代码。