我为我的过滤器配置了以下配置。这用于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
答案 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
的引用的应用程序ServiceManager
来updates 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类。