Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Opa...
Tenho um form que fiz utilizando Zend_Form, que quero usar tanto para adicionar como para editar registros... Ja fiz a parte da adicao... Agora que estou na edicao como faco pra preencher o atributo value="" do input para que o usuario saiba qual o registro que ele esta alterando?
Estou passando o id desse campo por get... Ele esta passando sem problemas pois posso imprimir na view... Mas o que devo acrescentar no meu form para o caso dele ter q imprimir dentro do value?
Vlw...
Aqui est'ao meus codigos...
Do Form...
class SetorForm extends Zend_Form {
public function init(){
$setor= new Zend_Form_Element_Text("setor");
$setor ->setLabel("Nome do Setor:")
->setRequired(true)
->addFilter("StripTags")
->addFilter("StringTrim")
->addValidator("NotEmpty")
->getValidator("NotEmpty")->setMessage("Campo obrigatório");
$submit = new Zend_Form_Element_Submit("submit");
$submit->setLabel("Gravar")
->setAttrib("id", "gravar")
->setAttrib("class", "button");
$this->addElements(array($setor, $submit));
$this->addDisplayGroup(array("setor","submit"), "cadastro",array("legend"=>"Formulário de Cadastro de Setor"));
}
}
Da view, na qual eu consigo imprimir o valor que eu quero
<?php echo $this->form; ?>
<?php print_r($this->setor["nome_setor"]); ?>
<a class="button" href="<?php echo $this->baseUrl()."/setor"?>">Voltar</a>Estava tentando usar o método populate()... So que sem sucesso... Não sei o que estou fazendo de errado... continuo fuçando documentação... Não tenho muita experiencia em zend...
No controller tenho...
function editarAction() {
$this->view->assign("titulo", "Editando setor");
$this->_model = new SetorModel();
$setor_id = (int) $this->_getParam("id_setor");
$result = $this->_model->find($setor_id);
if ( count($result) == 0 ) {
$this->view->message = "Setor não encontrado";
}
$data = $this->_model->getSetores($setor_id);
$form_setor = new SetorForm();
$form_setor->populate($data);
$this->view->form = $form_setor;
// aqui uso soh pra imprimir pra fazer testes
$this->view->setor = $data;
}
Caso seja necessário pra algo, o método getSetores tá na class SetorModel...
public function getSetores ($id="") {
$select = $this->select();
$query_setor = $select ->setIntegrityCheck(false)
->from($this->_name, $this->_cols)
->order("nome_setor");
if($id!="") {
$query_setor->where("id_setor = ".$id);
}
$query_setor = $this->fetchAll($select);
return $query_setor->toArray();
}
Vou testar tua dica sobre as validações... =D
Sugestão que recebi de um amigo...
"Faz o form na própria view com html... fica easy..."
Achei que "fazer isso" = "serviço porco"...
O teu controller tá certo. O erro está aqui:
$data["nome_setor"];
$setor= new Zend_Form_Element_Text("setor");
O nome tem que ser o mesmo. Ou nome_setor para os dois ou setor para os dois.
>
Sugestão que recebi de um amigo...
"Faz o form na própria view com html... fica easy..."
Achei que "fazer isso" = "serviço porco"...
Eu também acho serviço porco, mas uma das grandes vantagens do Zend Framework é poder fazer a mesma coisa de diversas maneiras.
Carlos Eduardo
Cara... Valeu a ajuda... Perdi uma tarde nisso sem ver esse erro... Valeu!
Você precisa passar um array onde a chave seja o nome do campo e o valor, o valor a ser passado para o campo, para o método $this->populate(array $dados).
Como você está fazendo no Controller da edição? Poste esta parte do seu controller, para a gente ver como está sendo feito.
Outra coisa, com relação aos validadores.
$setor = new Zend_Form_Element_Text("setor");
$setor->setLabel("Nome do Setor:")
->setRequired(true)
->addFilter("StripTags")
->addFilter("StringTrim")
->addValidator("NotEmpty")
->getValidator("NotEmpty")->setMessage("Campo obrigatório");
Você pode fazer diferente, sem a necessidade de adicionar a mensagem ali. Algo assim:
$setor = new Zend_Form_Element_Text("setor");
$setor->setLabel("Nome do Setor:")
->setRequired()// o padrão do setRequired já é true, então não precisa colocar ali
->addFilter("StripTags")
Aí você segue o que está neste código, que as mensagens de todos os validadores (ou pelo menos todos os que eu já coloquei ali) vão aparecer traduzidos.
Carlos Eduardo