试图将输入过滤器注入服务


zf2 Trying to inject input filter into service

我试图创建一个自定义过滤器并通过工厂将其注入到服务中。

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;
            },
        ),
    );
}