我的应用程序用户表单中有以下代码,用于为ContractID = '2015/023'
创建输入过滤器。
JOIN
如您所见,我将类名设置为过滤器的名称。
我收到以下错误:
ContractID
。
如何将此过滤器加入address2 element
?
注意
我想使用配置设置它,而不是在模块类中执行调用,所以我可以说 $inputFilter = new InputFilter();
$inputFilter->add([
'name' => 'address2',
'required' => true,
'filters' => [
['name'=>'StringTrim'],
['name'=>'Administration\Filter\Ucwords']
]
]);
而不是过滤器配置中的完整类名。
答案 0 :(得分:1)
配置对我来说是正确的。这里唯一的问题是您在指定过滤器名称(Administration\Filter\Ucwords
)时发生了拼写错误。确保这样的类存在并且可以自动加载。
我还强烈建议您指定类常量(对于完全限定的类名解析)而不是字符串,例如
...
['name' => Administration\Filter\Ucwords::class]
...
答案 1 :(得分:0)
对于ZF3
假设您的Ucwords
过滤器正在实施Zend\Filter\FilterInterface
。然后,您可以在应用中的特定位置提供自定义过滤器,方法是将其添加到FilterPluginManager
和FilterChain
。如果FilterChain
必须知道您附加到FilterPluginManager
的任何过滤器。这是要牢记的要点。
N.B。但是您可以创建工厂而不是闭包。
方法1
将以下代码放入module.config.php
。
'service_manager' => [
'factories' => [
CustomFilter::class => function($sm){
$filterChain = new \Zend\Filter\FilterChain;
$filterChain->getPluginManager()
->setInvokableClass('Ucwords', \Administration\Filter\Ucwords::class);
return new CustomFilter($filterChain);
},
],
'aliases' => [
'CustomFilter' => CustomFilter::class,
],
],
方法2
确保通过位于应用程序配置目录中的 Zend\Filter
启用modules.config.php
。
现在将以下代码放入模块的module.config.php
。
'service_manager' => [
'factories' => [
CustomFilter::class => function($sm){
$filterPluginManager = $sm->get('FilterManager');
$filterChain = new \Zend\Filter\FilterChain();
$filterChain->setPluginManager($filterPluginManager);
return new CustomFilter($filterChain);
},
],
'aliases' => [
'CustomFilter' => CustomFilter::class,
],
],
'filters' => [
'factories' => [
Ucwords::class => InvokableFactory::class
],
'aliases' => [
'Ucwords' => Ucwords::class,
],
],
<强>实施强>
现在创建Zend\InputFilter\Factory
的实例(别名 InputFactory )。使用上一代码中的闭包设置您创建并通过 CustomFilter 的构造函数传递的 FilterChain 对象。然后根据需要使用Zend\InputFilter\Factory
createInput()方法创建输入。将自定义 Ucwords 过滤器分配到您需要的位置(在这种情况下,我将其添加到标题)。请参阅以下代码。
<?php
use Zend\Filter\FilterChain;
use Zend\InputFilter\InputFilter;
use Zend\InputFilter\Factory as InputFactory;
class CustomFilter extends InputFilter
{
protected $filterChain;
public function __construct(FilterChain $filterChain)
{
$this->filterChain = $filterChain;
// Set the FilterChain object
$factory = new InputFactory();
$factory->setDefaultFilterChain($this->filterChain);
$this->add($factory->createInput(array(
'name' => 'title',
'required' => true,
'filters' => array(
array(
// Here we go
'name' => 'Ucwords',
),
),
)));
...
}
}