Php ZF2,注册自定义输入筛选器并从表单工厂访问它?
我有一个表单、FormFactory和InputFilter。我想实例化一个表单,并在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')时,我收到以下错误消息 提供的过滤器规格无效;两者都不是筛选器实例 也
createService()
方法上为表单分配输入筛选器
模块具有getFormElementConfig()
方法和getInputFilterConfig()
当我试图从表单工厂访问$serviceManager->get('InputFilterManager')->get('Page\Form\NewsFormInputFilter')
时,我收到以下错误消息
提供的过滤器规格无效;两者都不是筛选器实例
也不是数组规范
module/Page/module.php
您很可能存在配置问题。我认为这一行很可能不会返回任何内容:
$serviceManager->get('InputFilterManager')->get('Page\Form\NewsFormInputFilter');
我看到您在Module.phpgetInputFilterConfig()
方法中声明了'Page\Form\NewsFormInputFilter'
。但是我在您的代码中没有看到这个InputFilter
。你有那门课的档案吗
在命名空间Page\Form
中应该有一个名为NewsFormInputFilter
的输入筛选器类
更新
请尝试删除getInputFilterSpecification
,不要实现InputFilterProviderInterface
。在我看来,您似乎希望调用init
。您不需要该接口和getInputFilterSpecification
方法
确保模块类实现Zend\ModuleManager\Feature\InputFilterProviderInterface
您确定您的文件位于页面模块中吗?您很可能存在配置问题。我认为这一行很可能不会返回任何内容:
$serviceManager->get('InputFilterManager')->get('Page\Form\NewsFormInputFilter');
我看到您在Module.phpgetInputFilterConfig()
方法中声明了'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',
)
)
)
}