Existe uma versão do mesmo tutorial porém utilizando AJAX aqui:

http://programatik.soucafecomleite.com.br/zend-validate-com-ajax

 

Vou mostrar o uso básico do Zend_Validate, porém não tem segredo. Primeiro começamos com um formulário básico.


  <form name="frm" action="<? echo $this->baseUrl ?>/Produto/insere" method="post">
<table>
<tr>
<td>
      Nome do Produto:</td>
<td>
       <input type="text" name="nomeProduto"/></td>
</tr>
<tr>
<td>
      Valor Produto:</td>
<td>
      <input type="text" name="valorProduto" /></td>
</tr>
</table>
<input type="submit" value="Inserir" />
  </form>

		class ProdutoController extends Zend_Controller_Action
	{

		function insere(){

			// Pegando os valores da camada de visao

			$nome       = $this->_request->getParam("nomeProduto");
			$valor      = $this->_request->getParam("valorProduto");

			// Dando Loader na classes de validacao
			Zend_Loader::loadClass('Zend_Validate_StringLength');
			Zend_Loader::loadClass('Zend_Validate_Float');

			// Instanciando os validadores
			$validadorNome       = new Zend_Validate_StringLength(1,100);
			$validadorValor      = new Zend_Validate_Float();

			// Setando as mensagens e os tipos de validação
			$validadorNome->setMessage(
					"Campo nome é obrigatório".,
					Zend_Validate_StringLength::TOO_SHORT);

			$validadorNome->setMessage(
					"Campo nome maior que o permitido.",
					Zend_Validate_StringLength::TOO_LONG);

			$validadorValor->setMessage(
					"Campo valor nao é um número válido.",
					Zend_Validate_Float::NOT_FLOAT);

			// Verificando se os valores digitados sao válidos
			if ( $validadorNome->isValid(trim($nome)) &&
				 $validadorNome->isValid($nome) &&
				 $validadorValor->isValid($valor) ){

				// Executa os procedimentos para insercao	

			} else {
				// Deu erro na validacao

				$msg = array_merge( $validadorNome->getMessages(), $validadorValor->getMessages() );

// Na variavel $msg vai ter todos os erros apontados no formulario,
//basta exibir em um alert ou direto no corpo da página.
			}

		}

	}

Uma boa prática é carregar todas as mensagens em um arquivo texto ao invés de utilizar as mensagens direto no arquivo do controller, apesar de php ser uma linguagem script e nao ser necessário a compilação de todo o sistema para apenas a troca de uma mensagem, um arquivo texto com todas as mensagens é válido pois iremos ter centralizado todas as mensagens.

Pode usar um absctract controller que faz esse papel, colocando a mensagem na camada de visao pois ela poderá usar em todos os controladores.

Anúncios