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



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

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

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

并将其注册到module.config.php 中

return [
'filters' => [
'aliases'   => [
'myCustomFilter' => TestFilterMyCustomFilter::class,
],
'factories' => [
TestFilterMyCustomFilter::class => TestFilterMyCustomFilterFactory::class,
],
],
];

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

'modules' => [
...
'ZendFilter',
'ZendInputFilter',
'ZendValidator',
],

请注意,我使用的是ZF3,那么还有什么需要设置/配置的吗?

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

是否在modules.config.php中加载ZendInputFilterhttps://github.com/zendframework/ZendSkeletonApplication/blob/master/config/modules.config.php

像这样:

return [
'ZendRouter',
'ZendInputFilter',
'ZendValidator',
'Application',
];

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

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

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

最新更新