Ir para conteúdo

POWERED BY:

Arquivado

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

Nino Giovanny

[Resolvido] Preencher atributo value de um form vindo de Zend_For

Recommended Posts

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> 

Compartilhar este post


Link para o post
Compartilhar em outros sites

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")
     ->addFilter("StringTrim");
  // ->addValidator("NotEmpty") desnecessário. Ao definir o setRequired, já é adicionado este validador
  // ->getValidator("NotEmpty")->setMessage("Campo obrigatório"); as mensagens vamos colocar no bootstrap.

 

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

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.