我正在尝试创建自定义过滤器并通过工厂将其注入服务中。
use Zend\InputFilter\InputFilter;
class WSRequestFilter extends InputFilter{
protected $inputFilter;
public function init(){
$this->add( array(
'name' => 'apiVersion',
'required' => true,
'filters' => [
array('name' => 'Real'),
...
在Module.php中......
public function getServiceConfig(){
return array(
...
'factories' => array(
'Puma\Service\WebServiceLayer' => function($sm) {
$wsRequestFilter = new Filter\WSRequestFilter();
$wsRequestFilter->init();
$wsl = new Service\WebServiceLayer($wsRequestFilter);
return $wsl;
},
),
);
}
但是在执行$wsRequestFilter->init();
时我得到了服务未找到异常。我还尝试使用与here类似的InputFilterManager
初始化过滤器,但我找不到尝试通过$serviceManager->get('InputFilterManager')
访问管理器的服务。我想我在这里缺少一些基本的东西。
答案 0 :(得分:2)
在创建过滤器对象之后,InputFilterManager会自动调用init()
方法。您无需手动调用。
将此添加到您的模块配置:
'input_filters' => array(
'invokables' => array(
'ws-request-filter' => '\YourModule\Filter\WSRequestFilter',
),
),
如下所示更改您的服务工厂:
public function getServiceConfig(){
return array(
...
'factories' => array(
'Puma\Service\WebServiceLayer' => function($sm) {
$filter = $sm->get('InputfilterManager')->get('ws-request-filter')
$wsl = new \YourModule\Service\WebServiceLayer($filter);
return $wsl;
},
),
);
}
它应该有用。