Zend_Filter_Input filtreleme tetiklemiyor

1 Cevap php

Ben arzu türüne benim giriş ve döküm alanları doğrulamak için büyü alıcı / ayarlayıcı yöntemleri Zend_Filter_Input kullanıyorum. Doğrulama kısmı harika çalışıyor, ancak filtreler tüm tetikleme değil gibiydi. İşte benim model ilgili mantık:

    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())));
        }
    }

Ve yine, çıkış aşağıdaki gibi çıkıyor:

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"
  }
}

Uzun macun için özür dilerim, ama ben o sorunu anlamak alakalı hissediyorum.

1 Cevap

Andy,

Ben tam olarak bu işlevi çoğaltılır ve ben Boole Filtre yanlış bir dize ve doğru değil ve boş olarak 1 döneceğini fark olmasına rağmen Doğrulayıcıları, tedavi edilecek alan için sırayla ayarlanması gerektiğini anlamışlardır ama olacak Daha sonra derin dalış. Alanların geri kalanı için NotEmpty doğrulayıcılar ayarlamak için deneyin.