我试图创建一个自定义过滤器并通过工厂将其注入到服务中。
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();
。我还尝试使用类似于这里的InputFilterManager
初始化过滤器,但我得到了一个未找到的服务,试图通过$serviceManager->get('InputFilterManager')
访问管理器。我想我遗漏了一些基本的东西
由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;
},
),
);
}