gpt4 book ai didi

php - 在 Zend Form 元素上使用多个 PregReplace 过滤器

转载 作者:可可西里 更新时间:2023-11-01 12:18:39 26 4
gpt4 key购买 nike

我希望能够在单个 Zend Form 元素上添加多个 PregReplace 过滤器。我可以使用以下代码添加一个 PregReplace 过滤器:

$word = new Zend_Form_Element_Text('word');
$word->addFilter('PregReplace', array(
'match' => '/bob/',
'replace' => 'john'
));
$this->addElement($word);

我试过了

$word = new Zend_Form_Element_Text('word');
$word->addFilter('PregReplace', array(
'match' => '/bob/',
'replace' => 'john'
));
$word->addFilter('PregReplace', array(
'match' => '/sam/',
'replace' => 'dave'
));
$this->addElement($word);

但这只是意味着只有第二个过滤器起作用。

如何添加多个 PregReplace 过滤器?

最佳答案

您面临的问题是第二个过滤器将覆盖 Zend_Form_Element 中定义的过滤器堆栈 ($this->_filters) 中的第一个过滤器。

正如 David 在问题评论中提到的,过滤器堆栈使用过滤器名称作为索引 ($this->_filters[$name] = $filter;) 这就是第二个过滤器覆盖的原因第一个。

为了解决这个问题,可以使用如下自定义过滤器:

$element->addFilter('callback', function($v) { return preg_replace(array('/bob/', '/sam/'),array('john', 'dave'), $v); });

这是使用 inline function() 完成的,如果您使用的不是 PHP 5.3 或更高版本,您可以按如下方式设置回调以使其工作:

$element->addFilter('callback', array('callback' => array($this, 'funcName')));

并在表单中的 init() 方法下添加:

function funcName($v) {
return preg_replace(array('/bob/', '/sam/'), array('john', 'dave'), $v);
}

最后,如果你只想使用 PregReplace 过滤器,不像 Marcin 的答案(语法不正确),你仍然可以这样做:

$element->addFilter('pregReplace', array(
array('match' => array('/bob/', '/sam/'),
'replace' => array('john', 'dave')
)));

这应该可以解决问题;)

关于php - 在 Zend Form 元素上使用多个 PregReplace 过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6705458/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com