Фильтрация Zend_Filter_Input не запускается - PullRequest
0 голосов
/ 30 января 2010

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

    public function getFilters() {
        $filters = array(
            '*'             =>  array('StringTrim'),
            'email_opt_in'  =>  array('Boolean'),
            'admin'         =>  array('Boolean'),
            'active'        =>  array('Boolean'),
            'phone'         =>  array('Digits'),
            'activated'     =>  array('Boolean'),
            'id'            =>  array('Int'),
            'birthyear'     =>  array('Int'),
            'username'      =>  array('StringToLower')
        );
        return $filters;
    }

    public function getValidators() {
        $validators = array(
            'email'     =>  array('EmailAddress'),
            'username'  =>  array('Alnum'),
            'first'     =>  array('Alpha'),
            'last'      =>  array('Alpha'),
            'birthyear' =>  array('Digits'),
            'phone'     =>  array('Digits')
        );
        return $validators;
    }

    public function __set($name, $value) {
        if (!array_key_exists($name,$this->_data)) {
            throw new Exception('Unknown property: ' . $name);
        }
        $input = new Zend_Filter_Input($this->getFilters(), $this->getValidators(), array($name => $value));

        if ($input->isValid()) {
            if (isset($input->$name)) {
                $this->_data[$name] = $input->$name;
            } else {
                $this->_data[$name] = $value;
            }
        } else {
            throw new Exception('The following fields contain invalid values: ' . implode(',',array_keys($input->getInvalid())));
        }
    }

И, тем не менее, вывод получается так:

object(MyApp_Model_User)#19 (1) {
  ["_data:protected"]=>
  array(15) {
    ["id"]=>
    string(1) "4"
    ["email"]=>
    string(19) "example@example.com"
    ["password"]=>
    string(32) "594851275f207072b172d7508f037d78"
    ["username"]=>
    string(6) "jdoe"
    ["first"]=>
    string(4) "Joe"
    ["last"]=>
    string(5) "Doe"
    ["phone"]=>
    string(10) "1112223333"
    ["email_opt_in"]=>
    int(1)
    ["zip"]=>
    string(5) "55555"
    ["birthyear"]=>
    string(4) "1984"
    ["gender"]=>
    string(4) "male"
    ["activated"]=>
    int(1)
    ["date_joined"]=>
    string(10) "2008-03-11"
    ["admin"]=>
    string(1) "1"
    ["active"]=>
    string(1) "1"
  }
}

Извините за длинную пасту, но я чувствую, что важно понять проблему.

1 Ответ

1 голос
/ 01 февраля 2010

Andy

Я повторил эту точную функциональность и понял, что для обработки поля должны быть установлены валидаторы, хотя я заметил, что булевский фильтр вернет 1 в виде строки, а не в true, и ноль для false, но Я буду погружаться глубже в более позднее время. Пожалуйста, попробуйте установить валидаторы NotEmpty для остальных полей.

...