找不到服务过滤插件Zend Framework

时间:2017-10-16 01:48:44

标签: filter configuration zend-framework2 zend-framework3 zend-filter

我为我的过滤器配置了以下配置。这用于zend框架的服务管理器设置。

$filters = [
  'factories' => ['Administration\Filter\StripSpaces'=>'Zend\ServiceManager\Factory\InvokableFactory']
  'aliases'   => ['StripSpaces'=>'Administration\Filter\StripSpaces']
];
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 Zend\Filter\FilterPluginManager

2 个答案:

答案 0 :(得分:0)

据我所知,ZF3中没有名为StripSpaces的过滤器。

答案 1 :(得分:0)

如果您想在InputFilter中使用自定义过滤器/验证器,则应从InputFilter中检索InputFilterManager课程,如下所示:

$serviceManager->get('InputFilterManager')->get(MyInputFilter::class);

或者使用任何别名而不是FQCN,它取决于您注册inputFilters的方式。

为什么我需要从管理器中获取inputfilter?由于在new MyInputFilter()中创建新对象时,InputFilter\Factory会创建InputFilterManager类的新实例。这不是包含您的配置的应用程序InputFilterManager,因此只是默认的Zend过滤器/验证器。如果您没有任何要使用的自定义过滤器或验证器,则可以使用。

当您使用应用程序InputFilterManager来提取输入过滤器时,通过提供包含对应用程序InputFilterManager的引用的应用程序ServiceManagerupdates the factory。从您的应用程序ServiceManager中,它会为您的过滤器和验证器以及InputFilter Factory的updates the chains提取其他管理器。所以InputFilter知道你的自定义过滤器/验证器。

请注意,您应该更新设置输入过滤器的方式。不要在__construct()中设置过滤器/验证器,因为链尚未更新,因此不包含自定义过滤器/验证器。将输入过滤器配置移至public function init()InputFilterManager$date = DateTime::createFromFormat('H', $hour, new DateTimeZone('America/New_York')); $date->setTimezone(new DateTimeZone($userTimeZone)); $userHour = $date->format('H'); 调用initializes您的InputFilter类。