我正在使用Zend Framework 2,并且我创建了一个新的输入过滤器,它将在整个应用程序中使用。我知道我需要将新过滤器添加到 FilterPluginManager 的列表中,以便我可以在创建输入时调用它。这是我认为我需要使用的代码:
'Zend'Filter'FilterPluginManager::setInvokableClass('myFilter', 'Namespace'Filters'MyFilter');
但是,我找不到这应该去哪里。这应该在引导程序中,还是在配置文件之一中,还是在其他地方?
这是
你想要的答案
https://packages.zendframework.com/docs/latest/manual/en/modules/zend.service-manager.quick-start.html
class Module
{
public function getServiceConfig()
{
return array(
'invokables' => array(
'UserInputFiler' => 'SomeModule'InputFilter'User',
),
);
}
}
在你的Module
中,实现InputFilterProviderInterface
并为InputFilterPluginManager
提供一个Factory
(AbstractPluginManager
):
namespace YourModule;
use Zend'ModuleManager'Feature'InputFilterProviderInterface;
class Module implements InputFilterProviderInterface
{
public function getInputFilterConfig()
{
return [
'factories'=>[
'your_input_filter_name'=>'YourModule'Factories'InputFilterFactory::class
]
];
}
}
现在实现工厂:
namespace YourModule'Factories;
use Zend'Filter'StringTrim;
use Zend'InputFilter'Input;
use Zend'InputFilter'InputFilter;
use Zend'ServiceManager'FactoryInterface;
use Zend'ServiceManager'ServiceLocatorInterface;
use Zend'Validator'StringLength;
class InputFilterFactory implements FactoryInterface
{
public function createService(ServiceLocatorInterface $serviceLocator)
{
$filter = new InputFilter();
$nameFilter = new Input("name");
$nameFilter->getValidatorChain()->attach(new StringLength([
'min'=>3,
'max'=>16
]));
$nameFilter->getFilterChain()->attach(new StringTrim());
$filter->add($nameFilter);
return $filter;
}
}
现在,在您的Controller
工厂或其他需要InputFilter
的工厂中,您可以访问InputFilterPluginManager
:
$inputFilterManager = $controllerManager->getServiceLocator()->get('InputFilterManager');
return new YourController(
$inputFilterManager->get('your_input_filter_name')
);
更新后,您还可以将工厂添加到模块.config中.php
'input_filters'=>[
'factories'=>[
'your_input_filter_name'=>InputFilterFactory::class
]
],