【问题标题】:Does exist Zend Filter similar to Zend Validator Identical?是否存在类似于 Zend Validator Identical 的 Zend Filter?
【发布时间】:2011-01-28 00:59:39
【问题描述】:

是否存在类似于 Zend Validator Identical 的 Zend Filter?

我应该过滤输入的情况=='test'

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

这样的过滤器不存在的问题。

谢谢, 约瑟夫

【问题讨论】:

  • 您能否提供更多信息,因为尚不清楚您的过滤将如何工作,也许是一些示例。无论如何,您可以创建自己的过滤器。

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


【解决方案1】:

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

过滤器如下所示:

// 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/',''));

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

【讨论】:

    【解决方案2】:

    你的问题不是很清楚 - 你想要一个过滤器来删除单词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 并对输入执行您自己的逻辑。

    【讨论】:

    • 我不想使用 PregReplace,我需要删除所有输入,所以使用正则表达式不好。我知道我可以制作自己的过滤器,但我不知道我是否可以使用 zend 框架中已经存在的过滤器
    【解决方案3】:

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

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

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

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

      $el->setValue(null);

    2. 或重置所有表单元素

      $form->reset();

    【讨论】:

    • 仅当输入等于 == 'somevalue' 时删除
    • 然后在 Marcin 的回答中使用自定义过滤器
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多