Php ZF2,注册自定义输入筛选器并从表单工厂访问它?

Php ZF2,注册自定义输入筛选器并从表单工厂访问它?,php,configuration,module,zend-framework2,input-filter,Php,Configuration,Module,Zend Framework2,Input Filter,我有一个表单、FormFactory和InputFilter。我想实例化一个表单,并在createService()方法上为表单分配输入筛选器 模块具有getFormElementConfig()方法和getInputFilterConfig() 当我试图从表单工厂访问$serviceManager->get('InputFilterManager')->get('Page\Form\NewsFormInputFilter')时,我收到以下错误消息 提供的过滤器规格无效;两者都不是筛选器实例 也

我有一个表单、FormFactory和InputFilter。我想实例化一个表单,并在
createService()
方法上为表单分配输入筛选器

模块具有
getFormElementConfig()
方法和
getInputFilterConfig()

当我试图从表单工厂访问
$serviceManager->get('InputFilterManager')->get('Page\Form\NewsFormInputFilter')
时,我收到以下错误消息

提供的过滤器规格无效;两者都不是筛选器实例 也不是数组规范

module/Page/module.php


您很可能存在配置问题。我认为这一行很可能不会返回任何内容:

$serviceManager->get('InputFilterManager')->get('Page\Form\NewsFormInputFilter');
我看到您在Module.php
getInputFilterConfig()
方法中声明了
'Page\Form\NewsFormInputFilter'
。但是我在您的代码中没有看到这个
InputFilter
。你有那门课的档案吗

在命名空间
Page\Form
中应该有一个名为
NewsFormInputFilter
的输入筛选器类

更新 请尝试删除
getInputFilterSpecification
,不要实现
InputFilterProviderInterface
。在我看来,您似乎希望调用
init
。您不需要该接口和
getInputFilterSpecification
方法

确保模块类实现
Zend\ModuleManager\Feature\InputFilterProviderInterface


您确定您的文件位于
页面
模块中吗?

您很可能存在配置问题。我认为这一行很可能不会返回任何内容:

$serviceManager->get('InputFilterManager')->get('Page\Form\NewsFormInputFilter');
我看到您在Module.php
getInputFilterConfig()
方法中声明了
'Page\Form\NewsFormInputFilter'
。但是我在您的代码中没有看到这个
InputFilter
。你有那门课的档案吗

在命名空间
Page\Form
中应该有一个名为
NewsFormInputFilter
的输入筛选器类

更新 请尝试删除
getInputFilterSpecification
,不要实现
InputFilterProviderInterface
。在我看来,您似乎希望调用
init
。您不需要该接口和
getInputFilterSpecification
方法

确保模块类实现
Zend\ModuleManager\Feature\InputFilterProviderInterface


您确定您的文件位于
页面
模块中吗?

InputFilter类不需要实现InputFilterProviderSpecification。您还需要为过滤器数组部分提供每个过滤器的数组(如下所示)。您在filters部分有name键,而不是在NewsFormInputFilter::init中包装在数组中。以下代码适合您的实现

<?php
namespace Page\Form;

use Zend\Filter\StringTrim;
use Zend\InputFilter\InputFilter;
use Zend\Form\Element;


class NewsFormInputFilter extends InputFilter
{
    public function init()
    {
        $this->add(
          array(
            'name' => 'name',
            'required' => true,
            'filters' => array(
                array(
                    'name' => 'StringTrim'
                )
            )
          )
    );
    }
}

InputFilter类不需要实现InputFilterProviderSpecification。您还需要为过滤器数组部分提供每个过滤器的数组(如下所示)。您在filters部分有name键,而不是在NewsFormInputFilter::init中包装在数组中。以下代码适合您的实现

<?php
namespace Page\Form;

use Zend\Filter\StringTrim;
use Zend\InputFilter\InputFilter;
use Zend\Form\Element;


class NewsFormInputFilter extends InputFilter
{
    public function init()
    {
        $this->add(
          array(
            'name' => 'name',
            'required' => true,
            'filters' => array(
                array(
                    'name' => 'StringTrim'
                )
            )
          )
    );
    }
}

@PradeepSanjaya您能调试并检查这一行
$serviceManager->get('InputFilterManager')->>get('Page\Form\NewsFormInputFilter')
返回的内容吗?@PradeepSanjaya此文件中的输入过滤器类在正确的文件夹中吗?那么在
src/Page/Form/NewsFormInputFilter
中,它是否具有正确的文件名
NewsFormInputFilter.php
(同时检查大小写)@PradeepSanjaya好的。我没有主意了,但如果它返回
null
,则说明您的配置有问题。你应该仔细检查你的设置。谢谢你的努力。我也没有主意了。砰的一声:-)@PradeepSanjaya你能调试并检查这行
$serviceManager->get('InputFilterManager')->>get('Page\Form\NewsFormInputFilter')
返回的内容吗?@PradeepSanjaya这个文件的输入过滤器类在正确的文件夹中吗?那么在
src/Page/Form/NewsFormInputFilter
中,它是否具有正确的文件名
NewsFormInputFilter.php
(同时检查大小写)@PradeepSanjaya好的。我没有主意了,但如果它返回
null
,则说明您的配置有问题。你应该仔细检查你的设置。谢谢你的努力。我也没有主意了。撞着我的头:-)
$serviceManager->get('InputFilterManager')->get('Page\Form\NewsFormInputFilter');
<?php
namespace Page\Form;

use Zend\Filter\StringTrim;
use Zend\InputFilter\InputFilter;
use Zend\Form\Element;


class NewsFormInputFilter extends InputFilter
{
    public function init()
    {
        $this->add(
          array(
            'name' => 'name',
            'required' => true,
            'filters' => array(
                array(
                    'name' => 'StringTrim'
                )
            )
          )
    );
    }
}
public function init()
{
    $this->add(
        array(
            'name' => 'title',
            'type' => 'Zend\\Form\\Element\\Select',
            'options' => array(
                'empty_option' => 'Please Select A Value...',
                'label' => 'Title',
                'value_options' => $this->getNewsCategoryList()
            ),
            'attributes' => array(
                'required' => 'required',
            )
        )
    )
}