Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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!
Poste como tentou fazer e o que aconteceu.
Carlos Eduardo
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.
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:
Captou mais ou menos a ideia?
Carlos Eduardo
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.
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
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