zf2尝试将输入过滤器注入服务中

时间:2014-06-12 15:04:59

标签: php zend-framework2

我正在尝试创建自定义过滤器并通过工厂将其注入服务中。

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')访问管理器的服务。我想我在这里缺少一些基本的东西。

1 个答案:

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

它应该有用。