domingo, 27 de maio de 2012

Classe de validação : CValidator

Veja bem,

Se você está que nem eu, desenvolvendo com yii já deve ter chegado a questão das classes de validação. Se não chegou, vai chegar.

No meu caso construí uma classe de validação para CEP.

Primeiro passo:

Na classe Model


    public function rules()
    {
        // NOTE: you should only define rules for those attributes that
        // will receive user inputs.
        return array(
            array('code',
                    'required'),
            array(
                'code','cep'),
            // The following rule is used by search().
            // Please remove those attributes that should not be searched.
            array(
                'id, code, noise, accessibility, neighborhood, afforestation, violence',
                'safe',
                'on' => 'search'),
            );
    }

//Segundo passo criar a classe de validação..........


class cep extends CValidator
{ //início da Classe

    public function validateAttribute($object, $attribute)
    {
        $message = utf8_encode("não é válido ou não existe.");
        if (!$this->validaCEP($object->$attribute)) {
            $message = $this->message !== null ? $this->message : Yii::t('cep',
                '{attribute} ' . $message);
            $this->addError($object, $attribute, $message);
        }

    }


    public function clientValidateAttribute($object, $attribute)
    {
        return "";

    }

    private function validaCEP($cep)
    {
        $cep = trim($cep);
        if (!is_numeric($cep)) {
            return false;
        }
        if (strlen($cep) != 8) {
            return false;
        }
       
        $content = $this->get_data("utilitario/lercep.php?cep=$cep");
        $content = trim($content);
       
        if (strlen($content) == 0)
        {
            return false;
        }
               
        return true;

    }

    function get_data($url)
    {
        $ch = curl_init();
        $timeout = 5;
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
        $data = curl_exec($ch);
        curl_close($ch);
        return $data;
    }

} //fim da Classe


Para mais detalhes acesse este link
http://abelcorreadias.blogspot.com.br/2012/01/criando-um-validator-para-o-campo-cpf.html

PS: utilitario/lercep.php não é um php mágico que acesse o cep de algum site como república virtual ou mesmo o site do correio. Estou acessando minha própria base de CEP. Atenção: a base de CEP do correio é gigantesca.

Nenhum comentário:

Postar um comentário