是否存在与Zend Validator类似的Zend Filter?

时间:2011-01-28 00:59:39

标签: zend-framework zend-form zend-filter

是否存在与Zend Validator相似的Zend Filter?

案例我应该过滤输入=='测试'

$el->addFilter('Identical','test');

此类过滤器不存在的问题。

谢谢, 约瑟夫

3 个答案:

答案 0 :(得分:4)

我不确定这个过滤器应该如何工作,因为你的问题并不清楚。无论如何,我做了一些自定义过滤器,它将检查输入字段的值是否等于某个$令牌。如果它们等于输入值则为空字符串。

过滤器如下所示:

// file: APPLICATION_PATH/filters/Identical.php 

class My_Filter_Identical implements Zend_Filter_Interface {

    /**
     * Token with witch input is compared
     *
     * @var string
     */
    protected $_token;

    /**
     * Set token
     *
     * @param  string
     * @return void
     */
    public function __construct($token = '') {
        $this->_token = $token;
    }

    /**
     * Filtering method 
     *
     * @param string $value value of input filed
     * @return string
     */
    public function filter($value) {

        if ($value !== $this->_token) {
            return $value;
        }

        return '';
    }

}

将其应用于给定的表单元素:

require_once (APPLICATION_PATH . '/filters/Identical.php');
$el1->addFilter(new My_Filter_Identical('test'));

当然不是require_once,它可以添加到您的资源自动加载器中,但作为一个例子,我认为现在不需要它。

编辑:

忘记提及pregReplace过滤器。 与上面的自定义过滤器相同,可以使用pregReplace过滤器完成:

$el1->addFilter('pregReplace',array('/test/',''));

但是,正如我所说,我不确定您希望过滤器如何工作。如果您提供更多信息,我可以提供更多帮助。

答案 1 :(得分:1)

您的问题并不是那么清楚 - 您是否想要一个删除单词test的过滤器?或者你在谈论过滤表单输入?那么举个例子,你想从el输入中删除test输入包含的内容吗?

如果您想从输入中删除测试,可以使用Zend_Filter_PregReplace

$filter = new Zend_Filter_PregReplace(array('match' => '/test/', 'replace' => ''));
$input  = 'What is this test about!';
$filter->filter($input);

应该给你What is this about!

没有过滤器可以过滤相同的表单输入,如果它被输入到另一个输入我不认为。您可以尝试创建自己的input filter并在输入上执行自己的逻辑。

答案 2 :(得分:1)

目前还不清楚你要做什么。如果你给出更多解释,那就更好了。

  

我需要删除所有输入,因此使用正则表达式并不好。

如果您只想清除表单元素中的数据,可以使用以下方法之一:

  1. 通过将元素的值设置为空来清除元素值。

    $ EL->的setValue(空);

  2. 或重置所有表单元素

    $形式 - >复位();