Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Zf2如何使用筛选器类传递参数?_Php_Forms_Zend Framework_Filter_Zend Framework2 - Fatal编程技术网

Php Zf2如何使用筛选器类传递参数?

Php Zf2如何使用筛选器类传递参数?,php,forms,zend-framework,filter,zend-framework2,Php,Forms,Zend Framework,Filter,Zend Framework2,我想在zend framwork 2中使用SeparatorToSeparator()过滤器来过滤我的数据。如何将两个参数(setSearchSeparator和setReplacementSeparator)传递给构造函数 $inputFilter->add(array( 'name' => 'supplierName', 'required' => true, 'filters' => array( array('name' =


我想在zend framwork 2中使用SeparatorToSeparator()过滤器来过滤我的数据。
如何将两个参数(setSearchSeparator和setReplacementSeparator)传递给构造函数

$inputFilter->add(array(
    'name' => 'supplierName',
    'required' => true,
    'filters' => array(
        array('name' => 'StripTags'),
        array('name' => 'StringTrim'),
        array('name'=>"Word\SeparatorToSeparator"
    ),
));
路径:zendframework/bin/libary/Zend/Filter/Word/separator.php

class SeparatorToSeparator extends AbstractFilter
{
    protected $searchSeparator = null;
    protected $replacementSeparator = null;



       /**
         * Constructor
         *
         * @param  string  $searchSeparator      Separator to search for
         * @param  string  $replacementSeparator Separator to replace with
         */
        public function __construct($searchSeparator = ' ', $replacementSeparator = '-')
        {
            $this->setSearchSeparator($searchSeparator);
            $this->setReplacementSeparator($replacementSeparator);
        }
已更新

$inputFilter->add(array(
            'name' => 'supplierName',
            'required' => true,
            'filters' => array(
                array('name' => 'StripTags'),
                array('name' => 'StringTrim'),
                array('name'=>'Word\SeparatorToSeparator',
                      'options' => array(
                                    'search_separator'      => 'a',
                                    'replacement_separator' => 'b'
                                )
                     )
            ),
        ));
我收到了以下错误消息:

警告:preg_quote()要求参数1为字符串,数组在 C:\wamp\www\tebipdevelopment\vendor\zendframework\zendframework\library\Zend\Filter\Word\separator.php 在线92

我已经打开了这一行,并且像这样打印了错误消息

print_r($this->searchSeparator);
print_r($this->replacementSeparator);
结果

数组([search_separator]=>a[replacement_separator]=>b)
在这种情况下,search_分隔符等于array而不是string

注意,您不需要setter,但我已经添加了它们,过滤器将尝试使用setter(如果存在)(setCamelCase()表示法)

现在,您可以设置选项:

$inputFilter->add(array(
    'name' => 'supplierName',
    'required' => true,
    'filters' => array(
        array('name' => 'StripTags'),
        array('name' => 'StringTrim'),
        array(
           'name'=>"Word\SeparatorToSeparator"
           'options' => array(
               'search_separator'      => 'bla',
               'replacement_separator' => 'bla'
           )
        )
    ),
));

我遇到了同样的问题,与其他验证器不同,正如您所发现的,单词验证器不接受一系列选项。我使用的解决方法是首先实例化单词filter,将所需的构造函数参数传递给它,然后将该实例添加到filters规范中

$wordFilter = new \Zend\Filter\Word\SeparatorToSeparator('a', 'b');

$inputFilter->add(array(
    'name' => 'supplierName',
    'required' => true,
    'filters' => array(
        array('name' => 'StripTags'),
        array('name' => 'StringTrim'),
        $wordFilter,
    ),
));

不要使用构造函数,像其他过滤器一样使用setOptions,然后您可以让选项为您传递。不需要构造函数。谢谢,我不知道为什么我会看到这个错误消息:警告:preg_quote()希望参数1是字符串,数组在C:\wamp\www\tebipdevelopment\vendor\zendframework\zendframework\library\Zend\Filter\Word\separator.php的第90行,您是否使用#符号作为分隔符?
$wordFilter = new \Zend\Filter\Word\SeparatorToSeparator('a', 'b');

$inputFilter->add(array(
    'name' => 'supplierName',
    'required' => true,
    'filters' => array(
        array('name' => 'StripTags'),
        array('name' => 'StringTrim'),
        $wordFilter,
    ),
));