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.