Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

ThiagoLimah

Buscando CEP no BuscaCep

Recommended Posts

Olá pessoal, estou a horas tentando adequar o código de exemplo do webservice www.BuscarCep.com.br para funcionar em Zend mas sem sucesso!

 

Preciso de exatamente isto no zend: http://buscarcep.com.br/exemplos/buscar_cep_php/formulario.php

 

Mas ainda sou novo no zend e não conheço quase nada, alguém poderia me ajudar a adaptar o código para que funcione em zend?

 

Desde já agradeço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Alguém? Não sei nada de Ajax.

 

Tentei criar uma Library e um Helper pra tentar interagir com o Zend_Form mas não sei como fazer isto, se alguém puder ajudar!

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vou postar um pouco simplificado!

 

Tenho o form:

<?php

   class Application_Form_CadastrarPaciente extends Zend_Form {

       public function init() {

           $this->setMethod('post');
           $this->setName('form');

           $nome = new Zend_Form_Element_Text('nome');
           $nome->setLabel('Nome Completo: * ')
                ->addValidator('alnum', false, array('allowWhiteSpace' => true))
                ->addValidator('StringLength', false, array(4, 50))
                ->addFilter('StripTags')
                ->setAttrib('size', '60')
                ->setAttrib('class', 'tooltip')
                ->setAttrib('title', 'Digite seu nome completo neste campo.')
                ->setRequired(true);
           $this->addElement($nome);

           $validator = new Zend_Validate_Db_NoRecordExists('pacientes', 'cpf');
           $validator->setMessage("Erro: Já existe um paciente cadastrado com este CPF.");
           $cpf = new Zend_Form_Element_Text('cpf');
           $cpf->setLabel('CPF: * ')
               ->addValidator('StringLength', false, 11)
               ->addValidator('Digits')
               ->addValidator($validator)
               ->addValidator(new Sistema_Validate_Cpf())
               ->setAttrib('onKeyPress', 'return apenasNumeros(event);')
               ->setAttrib('maxlength', '11')
               ->setAttrib('size', '30')
               ->setAttrib('class', 'tooltip')
               ->setAttrib('title', 'Digite o número do seu CPF neste campo.')
               ->setRequired(true);
           $this->addElement($cpf);

           $validator = new Zend_Validate_Db_NoRecordExists('pacientes', 'email');
           $validator->setMessage("Erro: Já foi um cadastro com este email.");
           $email = new Zend_Form_Element_Text('email');
           $email->setLabel('E-mail: ')
                 ->addValidator($validator)
                 ->addValidator('EmailAddress')
                 ->setAttrib('size', '60')
                 ->setAttrib('rel', 'tooltip')
                 ->setAttrib('title', 'Digite um e-mail válido. Você receberá as informações neste e-mail')
                 ->addFilters(array('StringTrim', 'StringtoLower'));
           $this->addElement($email);

           $data_nascimento = new ZendX_JQuery_Form_Element_DatePicker('data_nascimento');
           $data_nascimento->setLabel('Data de Nascimento:')
                           ->addValidator(new Zend_Validate_Date(array('format' => 'dd/MM/yyyy')))
                           ->setJQueryParam('dateFormat', 'dd/mm/yy')
                           ->setAttrib('class', 'tooltip')
                           ->setAttrib('title', 'Selecione sua data de nascimento neste campo.')
                           ->setRequired(TRUE);
           $this->addElement($data_nascimento);

           $cep = new Zend_Form_Element_Text('cep');
           $cep->setLabel('CEP: ')
               ->setAttrib('maxlength', '9')
               ->setAttrib('onExit', "javascript buscaCep();")
               ->setAttrib('size', '20')
               ->setAttrib('class', 'tooltip')
               ->setAttrib('title', 'Digite o seu CEP neste campo.');
           $this->addElement($cep);

           $endereco = new Zend_Form_Element_Text('endereco');
           $endereco->setLabel('Endereço Residencial: ')
                    ->setAttrib('size', '60')
                    ->setAttrib('class', 'tooltip')
                    ->setAttrib('title', 'Digite o nome de seu endereço residencial neste campo.');
           $this->addElement($endereco);

           $numero = new Zend_Form_Element_Text('endereco_numero');
           $numero->setLabel('Número: ')
                  ->setAttrib('size', '10')
                  ->setAttrib('class', 'tooltip')
                  ->setAttrib('title', 'Digite o número de sua residencia neste campo.');
           $this->addElement($numero);

           $bairro = new Zend_Form_Element_Text('bairro');
           $bairro->setLabel('Bairro: ')
                  ->setAttrib('size', '40')
                  ->setAttrib('class', 'tooltip')
                  ->setAttrib('title', 'Digite o nome de seu bairro neste campo.');
           $this->addElement($bairro);

           $cidade = new Zend_Form_Element_Text('cidade');
           $cidade->setLabel('Cidade: ')
                  ->setAttrib('size', '40')
                  ->setAttrib('class', 'tooltip')
                  ->setAttrib('title', 'Digite o nome de sua cidade neste campo.');
           $this->addElement($cidade);

           $estados = array(
                               ''   => "Escolha seu estado",
                               'AC' => "Acre",
                               'AL' => "Alagoas",
                               'AP' => "Amapá",
                               'AM' => "Amazonas",
                               'BA' => "Bahia",
                               'CE' => "Ceará",
                               'DF' => "Distrito Federal",
                               'ES' => "Espirito Santo",
                               'GO' => "Goias",
                               'MA' => "Maranhão",
                               'MT' => "Mato Grosso",
                               'MS' => "Mato Grosso do Sul",
                               'MG' => "Minas Gerais",
                               'PA' => "Pará",
                               'PB' => "Paraíba",
                               'PR' => "Paraná",
                               'PE' => "Pernambuco",
                               'PI' => "Piauí",
                               'RJ' => "Rio de Janeiro",
                               'RN' => "Rio Grande do Norte",
                               'RS' => "Rio Grande do Sul",
                               'RO' => "Rondônia",
                               'RR' => "Roraima",
                               'SC' => "Santa Catarina",
                               'SP' => "São Paulo",
                               'SE' => "Sergipe",
                               'TO' => "Tocantins"
                           );
           $estado = new Zend_Form_Element_Select('uf');
           $estado->setLabel('Estado: ')
                  ->setMultiOptions($estados)
                  ->setAttrib('class', 'tooltip')
                  ->setAttrib('title', 'Digite o nome de seu estado neste campo.');
           $this->addElement($estado);


           $captcha = new Zend_Form_Element_Captcha(
                   'captcha', array(
                           'label' => "Digite o código da imagem no campo ao lado para validar o cadastro.",
                           'captcha' => array(
                               'captcha' => 'Image',
                               'wordLen' => 6,
                               'timeout' => 250,
                               'width' => 300,
                               'height' => 60,
                               'font' => 'font/Engr.TTF',
                               'fontSize' => 25,
                               'dotNoiseLevel' => 1,
                               'imgDir' => 'captcha/',
                               'imgUrl' => '/sistema/public/captcha/'
                           )
                       )
                   );
           $captcha->setAttrib('maxlength', '8');
           $this->addElement($captcha);

           $submit = new Zend_Form_Element_Submit('enviar');
           $submit->setLabel('Cadastrar')
                  ->setAttrib('class', 'botao-padrao');
           $this->addElement($submit);

       }

   }

 

E também criei um helper que faz a busca no webservice e retorna os dados do cep.

 

<?php

class Zend_View_Helper_BuscaCep extends Zend_View_Helper_Abstract {

   public function BuscaCep($cep){
       $resultado = file_get_contents('http://www.buscarcep.com.br/?cep='.urlencode($cep).'&formato=string&chave=MINHA_CHAVE_AQUI');
       if(!$resultado){
           $resultado = "&resultado=0&resultado_txt=erro+ao+buscar+cep";
           echo "<script>\n alert(\"Web service de busca de CEP temporariamente indisponível!\"); \n</script>";
       }
       parse_str($resultado, $retorno);
       return $retorno;
   }

}

 

Até aqui tudo bem, o que não estou conseguindo é pegar estes valores e adicioná-los no form depois que o usuário digitar o cep!

 

Espero que tenha entendido, não sei se comecei da melhor forma.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que você vai precisar é criar uma action em algum controller seu. Esta action vai enviar a solicitação (como no seu view helper, que não vai funcionar) para o site buscarcep.com.br, capturar o retorno, tratar e enviar para o navegador. Esta seria a parte do PHP/Zend Framework. Depois disto, tem também a parte do Javascript, que vai fazer isto de forma assíncrona, com Ajax.

 

O fluxo do processo é mais ou menos assim:

 

  • Cria os inputs com Zend Framework (como você já fez)
  • Quando o usuário modificar o campo do CEP (evento onchange do Javascript), você captura este valor
  • Com o valor digitado do CEP, você chama a Action criada via Ajax, passando por parâmetro o CEP
  • Esta Action retorna o valor tratado, podendo ser em formato JSON ou XML
  • Com Javascript, você pega este retorno tratado (em XML ou JSON) e abastece os campos do endereço no formulário

 

Captou mais ou menos a ideia?

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim a idéia eu entendi sim, só não sei fazer isso no javascript. Mas vou ver o que consigo fazer aqui!

 

Obrigado amigo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então... vamos fazendo por parte. A parte do Zend Framework você consegui fazer funcionar? Por exemplo, criando o controller e a action, acesse a URL diretamente e veja se aparece o retorno correto (JSON ou XML). Tendo isto pronto, aí só vai faltar o JS mesmo. Quando chegar neste ponto, movo o tópico para o fórum de JS que o pessoal de lá te ajuda.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.