Существует ли Zend Filter, похожий на Zend Validator Identical? - PullRequest
3 голосов
/ 28 января 2011

Существует ли Zend Filter, похожий на Zend Validator Identical?

Случай, в котором я должен фильтровать входные данные == 'test'

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

Проблема в том, что такого фильтра не существует.

Спасибо, Йосеф

Ответы [ 3 ]

4 голосов
/ 30 января 2011

Я не уверен, как этот фильтр должен работать, так как это не ясно из вашего вопроса.Во всяком случае, я сделал некоторый пользовательский фильтр, который будет проверять, равно ли значение входного поля некоторому $ токену.Если они равны, входное значение будет пустой строкой.

Фильтр выглядит следующим образом:

// 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 его можно добавить в ваш автозагрузчик ресурсов, но в качестве примера я думаю, что он сейчас не нужен.

Edit:

Забыл упомянуть фильтр pregReplace.То же самое, что делает пользовательский фильтр выше, может быть сделано с помощью фильтра pregReplace:

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

Но, как я уже сказал, я не уверен, как вы хотите, чтобы ваш фильтр работал.Если вы предоставите больше информации, возможно, я мог бы помочь больше.

1 голос
/ 31 января 2011

Не совсем понятно, что вы пытаетесь сделать. Если вы дадите больше объяснений, это было бы хорошо.

Мне нужно удалить все входные данные, так что не рекомендуется использовать регулярные выражения.

Если вы просто хотите очистить данные в элементах формы, вы можете использовать одно из следующих:

  1. Очистить значение элемента, установив значение элемента в ничто.

    $ el-> SetValue (нуль);

  2. или сброс всех элементов формы

    $ форма-> сброс ();

1 голос
/ 30 января 2011

Ваш вопрос не совсем ясен - вам нужен фильтр, который удаляет слово 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!

Нет фильтра, который бы фильтровал идентичный ввод формы, если бы он был введен в другой ввод, я не думаю.Вы можете попытаться создать собственный входной фильтр и выполнить собственную логику для ввода.

...