找不到服务过滤器插件 Zend 框架



我的过滤器得到了以下配置。 这用于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 类。

最新更新