我的过滤器得到了以下配置。 这用于Zend Framework的服务管理器设置。
$filters = [
'factories' => ['AdministrationFilterStripSpaces'=>'ZendServiceManagerFactoryInvokableFactory']
'aliases' => ['StripSpaces'=>'AdministrationFilterStripSpaces']
];
return ['filters'=>$filters];
对于表单用法
$inputFilter->add([
'name' => 'objectclassname',
'required' => true,
'filters' => [
['name' => 'StringTrim'],
['name' => 'StripTags'],
['name' => 'StripNewlines'],
['name' => 'StripSpaces'] // here is where my StripSpaces alias is used
],
'validators' => [
[
'name' => 'StringLength',
'options' => [
'min' => 5,
'max' => 255
],
]
],
]);
这是加载使用此过滤器的表单时的错误:
A plugin by the name "StripSpaces" was not found in the plugin manager ZendFilterFilterPluginManager
据我所知,ZF3 中没有名为 StripSpaces 的过滤器。
如果你想在你的输入过滤器中有一个自定义过滤器/验证器,你应该从你的InputFilterManager
中检索InputFilter
类,如下所示:
$serviceManager->get('InputFilterManager')->get(MyInputFilter::class);
或者使用任何别名而不是 FQCN,它基于您注册输入筛选器的方式。
为什么我需要从管理器获取我的输入过滤器?由于当您创建新对象时,如new MyInputFilter()
中所示,InputFilterFactory
会创建InputFilterManager
类的新实例。这不是包含您的配置的应用程序InputFilterManager
,因此只有默认的 Zend 过滤器/验证器。如果您没有任何要使用的自定义过滤器或验证器,则可以使用此方法。
当您使用应用程序InputFilterManager
获取输入筛选器时,它会通过提供包含对应用程序ServiceManager
引用的应用程序InputFilterManager
来更新工厂。从您的应用程序ServiceManager
它获取过滤器和验证程序的其他管理器,并更新 InputFilter 工厂的链。因此,输入过滤器知道您的自定义过滤器/验证器。
请注意,您应该更新设置输入过滤器的方式。不要在__construct()
中设置过滤器/验证器,因为链尚未更新,因此不包含自定义过滤器/验证器。将输入筛选器配置移动到从InputFilterManager
调用的public function init()
,这将初始化 InputFilter 类。