<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Diego Henrique &#187; Javascript</title>
	<atom:link href="http://www.diegoholiveira.com/blog/tag/javascript/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.diegoholiveira.com/blog</link>
	<description></description>
	<lastBuildDate>Fri, 08 Jan 2010 11:53:07 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Validando formulários com Zend Form, jQuery e Ajax.</title>
		<link>http://www.diegoholiveira.com/blog/2009/05/21/validando-formularios-com-zend-form-jquery-e-ajax/</link>
		<comments>http://www.diegoholiveira.com/blog/2009/05/21/validando-formularios-com-zend-form-jquery-e-ajax/#comments</comments>
		<pubDate>Fri, 22 May 2009 02:44:53 +0000</pubDate>
		<dc:creator>Diego Henrique</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Zend Framework]]></category>

		<guid isPermaLink="false">http://www.diegoholiveira.com/blog/?p=149</guid>
		<description><![CDATA[Sabemos que validar formulários hoje em dia é uma obrigação de todo bom desenvolvedor. E não validar apenas no cliente usando javascript, mas validar também no servidor. Validação é o primeiro de muitos passos para tornar sua aplicação mais segura. Uma técnica que eu acabei descobrindo recentemente e estou usando bastante é juntar o poder [...]]]></description>
			<content:encoded><![CDATA[<p>Sabemos que validar formulários hoje em dia é uma obrigação de todo bom desenvolvedor. E não validar apenas no cliente usando javascript, mas validar também no servidor. Validação é o primeiro de muitos passos para tornar sua aplicação mais segura.</p>
<p>Uma técnica que eu acabei descobrindo recentemente e estou usando bastante é juntar o poder do componente Zend_Form com o beleza do jQuery, o que me trouxe resultados muito bons, principalmente nos quesitos qualidade e desenvolvimento ágil.</p>
<p>Para demostrar essa técnica que eu estou utilizando eu vou partir do pressuposto que você já esta familiarizado com o ambiente do Zend Framework. Partindo disso, vou mostrar o código simples do formulário de cadastro:</p>
<div class="codesnip-container" >
<div class="php codesnip" style="font-family:monospace;"><span class="kw2">&lt;?php</span></p>
<p><span class="kw2">class</span> Cadastro_Form <span class="kw2">extends</span> Zend_Form <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> init<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">setAttrib</span><span class="br0">&#40;</span><span class="st_h">&#8216;id&#8217;</span><span class="sy0">,</span> <span class="st_h">&#8216;cadastro&#8217;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="sy0">-&gt;</span><span class="me1">setAction</span><span class="br0">&#40;</span><span class="st_h">&#8216;/index/index&#8217;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="sy0">-&gt;</span><span class="me1">setMethod</span><span class="br0">&#40;</span><span class="st_h">&#8216;post&#8217;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">addElement</span><span class="br0">&#40;</span> <span class="st_h">&#8216;text&#8217;</span><span class="sy0">,</span> <span class="st_h">&#8216;nome&#8217;</span><span class="sy0">,</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">&#8216;label&#8217;</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">=&gt;</span> <span class="st_h">&#8216;Nome&#8217;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">&#8216;required&#8217;</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">=&gt;</span> <span class="kw4">true</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">&#8216;validators&#8217;</span>&nbsp; &nbsp; <span class="sy0">=&gt;</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">&#8216;NotEmpty&#8217;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st_h">&#8216;StringLength&#8217;</span><span class="sy0">,</span> <span class="kw4">false</span><span class="sy0">,</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span>0<span class="sy0">,</span> 60<span class="br0">&#41;</span> <span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">addElement</span><span class="br0">&#40;</span><span class="st_h">&#8216;text&#8217;</span><span class="sy0">,</span> <span class="st_h">&#8216;email&#8217;</span><span class="sy0">,</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">&#8216;label&#8217;</span> &nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">=&gt;</span> <span class="st_h">&#8216;E-mail&#8217;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">&#8216;required&#8217;</span> &nbsp; &nbsp; &nbsp;<span class="sy0">=&gt;</span> <span class="kw4">true</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">&#8216;validators&#8217;</span> &nbsp; <span class="sy0">=&gt;</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">&#8216;NotEmpty&#8217;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">&#8216;EmailAddress&#8217;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">addElement</span><span class="br0">&#40;</span> <span class="st_h">&#8216;submit&#8217;</span><span class="sy0">,</span> <span class="st_h">&#8216;submit&#8217;</span><span class="sy0">,</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">&#8216;ignore&#8217;</span>&nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">=&gt;</span> <span class="kw4">true</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">&#8216;label&#8217;</span> &nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">=&gt;</span> <span class="st_h">&#8216;Entrar&#8217;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">getElement</span><span class="br0">&#40;</span><span class="st_h">&#8216;submit&#8217;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">removeDecorator</span><span class="br0">&#40;</span><span class="st_h">&#8216;label&#8217;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span></div>
</div>
<p>Agora que nosso formulário de cadastro já é um componente do projeto, vamos fazer as paginas, vou supor aqui que estamos trabalhando no controller index, portando criaremos duas actions para que nosso controller aqui fique da seguinte maneira:</p>
<div class="codesnip-container" >
<div class="php codesnip" style="font-family:monospace;"><span class="kw2">class</span> IndexController <span class="kw2">extends</span> Zend_Controller_Action <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co4">/** Nesta action iremos exibir o formulario */</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> indexAction<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co4">/** Nesta action iremos receber o dados por ajax para validação */</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> validarAction<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><span class="br0">&#125;</span><br />
<span class="br0">&#125;</span></div>
</div>
<p>Temos o básico para começarmos a trabalhar. Agora a ideia é validarmos estes dados na tela do cliente via ajax, para que antes do cliente submeter os dados ele consiga visualizar os possíveis erros e já corrigi-los. Lembrando também que isso NÃO descarta a validação no servidor.</p>
<p>Vamos ver como fica nosso metodo indexAction():</p>
<div class="codesnip-container" >
<div class="php codesnip" style="font-family:monospace;"><span class="kw2">public</span> <span class="kw2">function</span> indexAction<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$form</span> <span class="sy0">=</span> <span class="kw2">new</span> Cadastro_Form<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span>_request<span class="sy0">-&gt;</span><span class="me1">isPost</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$form</span><span class="sy0">-&gt;</span><span class="me1">isValid</span><span class="br0">&#40;</span> <span class="re0">$this</span><span class="sy0">-&gt;</span>_request<span class="sy0">-&gt;</span><span class="me1">getPost</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">view</span><span class="sy0">-&gt;</span><span class="me1">mensagem</span> <span class="sy0">=</span> <span class="st_h">&#8216;Formulario valido&#8217;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">view</span><span class="sy0">-&gt;</span><span class="me1">mensagem</span> <span class="sy0">=</span> <span class="st_h">&#8216;Ops. Formulario invalido.&#8217;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$form</span><span class="sy0">-&gt;</span><span class="me1">populate</span><span class="br0">&#40;</span> <span class="re0">$this</span><span class="sy0">-&gt;</span>_request<span class="sy0">-&gt;</span><span class="me1">getPost</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">view</span><span class="sy0">-&gt;</span><span class="me1">form</span> <span class="sy0">=</span> <span class="re0">$form</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span></div>
</div>
<p>E agora nossa index.phtml</p>
<div class="codesnip-container" >
<div class="php codesnip" style="font-family:monospace;"><span class="kw2">&lt;?php</span> <span class="kw1">if</span> <span class="br0">&#40;</span><a href="http://www.php.net/isset"><span class="kw3">isset</span></a><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">mensagem</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="sy1">?&gt;</span><br />
&lt;p&gt;<span class="kw2">&lt;?php</span> <span class="kw1">echo</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">mensagem</span><span class="sy0">;</span> <span class="sy1">?&gt;</span>&lt;/p&gt;<br />
<span class="kw2">&lt;?php</span> <span class="kw1">echo</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">form</span><span class="sy0">;</span> <span class="sy1">?&gt;</span></div>
</div>
<p>Não podemos esquecer de adicionar a biblioteca jQuery a nossa camada view, pois ela irá nos ajudar muito no processo, vejamos o nosso código javascript para a validação:</p>
<div class="codesnip-container" >
<div class="javascript codesnip" style="font-family:monospace;">$<span class="br0">&#40;</span>document<span class="br0">&#41;</span>.<span class="me1">ready</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">&#8216;#submit&#8217;</span><span class="br0">&#41;</span>.<span class="me1">bind</span><span class="br0">&#40;</span><span class="st0">&#8216;click&#8217;</span><span class="sy0">,</span> <span class="kw2">function</span> <span class="br0">&#40;</span>e<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; e.<span class="me1">preventDefault</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> nome <span class="sy0">=</span> $<span class="br0">&#40;</span><span class="st0">&#8216;#nome&#8217;</span><span class="br0">&#41;</span>.<span class="me1">val</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> email <span class="sy0">=</span> $<span class="br0">&#40;</span><span class="st0">&#8216;#email&#8217;</span><span class="br0">&#41;</span>.<span class="me1">val</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $.<span class="me1">ajax</span><span class="br0">&#40;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; url<span class="sy0">:</span> <span class="st0">&#8216;/index/validar&#8217;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; type<span class="sy0">:</span> <span class="st0">&#8216;post&#8217;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dataType<span class="sy0">:</span> <span class="st0">&#8216;json&#8217;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; data<span class="sy0">:</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; nome<span class="sy0">:</span> nome<span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; email<span class="sy0">:</span> email<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; success<span class="sy0">:</span> <span class="kw2">function</span> <span class="br0">&#40;</span>data<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">&#8216;.form-errors&#8217;</span><span class="br0">&#41;</span>.<span class="me1">remove</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>data <span class="sy0">==</span> <span class="kw2">true</span><span class="br0">&#41;</span> <span class="kw3">alert</span><span class="br0">&#40;</span> <span class="st0">&#8216;Passou&#8230;&#8217;</span> <span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span>campo <span class="kw1">in</span> data<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">&#8216;#&#8217;</span><span class="sy0">+</span>campo<span class="br0">&#41;</span>.<span class="me1">after</span><span class="br0">&#40;</span><span class="st0">&#8216;&lt;ul id=&quot;&#8217;</span><span class="sy0">+</span>campo<span class="sy0">+</span><span class="st0">&#8216;_errors&quot; class=&quot;form-errors&quot;&gt;&lt;/ul&gt;&#8217;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span>mensagem <span class="kw1">in</span> data<span class="br0">&#91;</span>campo<span class="br0">&#93;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">&#8216;#&#8217;</span><span class="sy0">+</span>campo<span class="sy0">+</span><span class="st0">&#8216;_errors&#8217;</span><span class="br0">&#41;</span>.<span class="me1">append</span><span class="br0">&#40;</span><span class="st0">&#8216;&lt;li&gt;&#8217;</span><span class="sy0">+</span>data<span class="br0">&#91;</span>campo<span class="br0">&#93;</span><span class="br0">&#91;</span>mensagem<span class="br0">&#93;</span><span class="sy0">+</span><span class="st0">&#8216;&lt;/li&gt;&#8217;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</div>
<p>Como vocês podem ver, nosso método validar irá retornar um objeto json para o jQuery poder trabalhar, e com o for iremos percorrer este objeto colocando cada mensagem em seu devido lugar. É um bom método por não fazer você ter que escrever duas validações, uma para javascript e outra para php. Você escreve apenas uma e utiliza em ambas as validações.</p>
<p>Agora nosso método validar:</p>
<div class="codesnip-container" >
<div class="php codesnip" style="font-family:monospace;"><span class="kw2">public</span> <span class="kw2">function</span> validarAction<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span>_request<span class="sy0">-&gt;</span><span class="me1">isXmlHttpRequest</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$form</span> <span class="sy0">=</span> <span class="kw2">new</span> Cadastro_Form<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">echo</span> <span class="re0">$form</span><span class="sy0">-&gt;</span><span class="me1">processAjax</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span>_request<span class="sy0">-&gt;</span><span class="me1">getPost</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span></div>
</div>
<p>Como vocês viram, devido ao nosso componente de formulário já está pronto tudo ficou muito mais simples, com apenas algumas linhas validamos e retornamos o resultado para o javascript poder exibir ao usuário.</p>
<p>O resultado desta combinação é muito interessante, pois mantem nossa aplicação modularizada, de forma que para adicionar novos campos no nosso formulário de cadastro não é necessário se preocupar com html e validação javascript, basta editar o componente Cadastro_Form.</p>
<p>Qualquer duvida deixa nos comentários ai que vamos trocando uma ideia. <img src='http://www.diegoholiveira.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Referencias:</p>
<p>http://framework.zend.com/manual/en/zend.form.html</p>
<p>http://framework.zend.com/manual/en/zend.validate.html</p>
<p>http://docs.jquery.com/Ajax</p>
]]></content:encoded>
			<wfw:commentRss>http://www.diegoholiveira.com/blog/2009/05/21/validando-formularios-com-zend-form-jquery-e-ajax/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Expressões regulares com javascript</title>
		<link>http://www.diegoholiveira.com/blog/2009/01/26/expressoes-regulares-com-javascript/</link>
		<comments>http://www.diegoholiveira.com/blog/2009/01/26/expressoes-regulares-com-javascript/#comments</comments>
		<pubDate>Mon, 26 Jan 2009 12:59:26 +0000</pubDate>
		<dc:creator>Diego Henrique</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Expressões Regulares]]></category>

		<guid isPermaLink="false">http://www.diegoholiveira.com/blog/?p=85</guid>
		<description><![CDATA[Uma das coisas mais uteis no mundo da computação são as expressões regulares. Elas nos dão um poder incrivel de manipular dados. Escrevi esse post com base nos meus estudos recentes sobre expressões regulares no javascript, portanto se você encontrar erros por favor reporte-os nos comentarios. Outra coisa é que não é minha ideia ensinar [...]]]></description>
			<content:encoded><![CDATA[<p>Uma das coisas mais uteis no mundo da computação são as expressões regulares. Elas nos dão um poder incrivel de manipular dados. Escrevi esse post com base nos meus estudos recentes sobre expressões regulares no javascript, portanto se você encontrar erros por favor reporte-os nos comentarios. Outra coisa é que não é minha ideia ensinar expressões regulares aqui, quero apenas mostrar como usa-las no javascript, se você tem interesse em aprender expressões regulares eu recomendo o guia-er do Aurelio, que é referencia nacional no assunto (inclusive ele possui um livro publicado sobre o assunto, excelente por sinal). Vamos lá então&#8230;</p>
<p><strong>O objeto RegExp.</strong></p>
<p>Vou mostrar aqui dois metodos do objeto:</p>
<ul>
<li>test – Testa a expressão regular e retorna true caso a expressão case com um valor.</li>
<li>exec &#8211; Executa a busca pela expressão regular retornando um array com informações do primeiro valor casado</li>
</ul>
<p>Para definirmos um objeto do tipo RegExp basta atribuir a uma variavel o padrão desejado dentro de duas barras, assim:</p>
<div class="codesnip-container" >
<div class="javascript codesnip" style="font-family:monospace;"><span class="kw2">var</span> regex <span class="sy0">=</span> <span class="co2">/([0-2][0-9]|3[01])\/(0[1-9]|1[0-2])\/([12][0-9]{3})/</span><span class="sy0">;</span></div>
</div>
<p>Simples né? Agora vamos supor a seguinte string:</p>
<div class="codesnip-container" >
<div class="javascript codesnip" style="font-family:monospace;"><span class="kw2">var</span> string <span class="sy0">=</span> <span class="st0">&#8216;Eu, Diego, nasci em 10/09/1985&#8242;</span><span class="sy0">;</span></div>
</div>
<p>Vamos agora procurar uma data dentro dessa string usando o metodo exec:</p>
<div class="codesnip-container" >
<div class="javascript codesnip" style="font-family:monospace;"><span class="kw2">var</span> saida <span class="sy0">=</span> regex.<span class="me1">exec</span><span class="br0">&#40;</span> string <span class="br0">&#41;</span><span class="sy0">;</span></div>
</div>
<p>O metodo exec nos retorna um vetor onde o primeiro indice (0) é o nosso casamento, e os demais indices são os grupos casados, no nosso caso a saida é:</p>
<div class="codesnip-container" >
<div class="javascript codesnip" style="font-family:monospace;">array <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="nu0">0</span> <span class="sy0">=&gt;</span> <span class="nu0">10</span><span class="sy0">/</span>09<span class="sy0">/</span><span class="nu0">1985</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="nu0">1</span> <span class="sy0">=&gt;</span> <span class="nu0">10</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="nu0">2</span> <span class="sy0">=&gt;</span> 09<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="nu0">3</span> <span class="sy0">=&gt;</span> <span class="nu0">1985</span><br />
<span class="br0">&#125;</span></div>
</div>
<p>Se formos apenas validar uma data qualquer, como se estivessemos validando uma data em um formulario, poderiamos simplesmente fazer assim:</p>
<div class="codesnip-container" >
<div class="javascript codesnip" style="font-family:monospace;"><span class="kw1">if</span> <span class="br0">&#40;</span>regex.<span class="me1">test</span><span class="br0">&#40;</span> <span class="st0">&#8217;10/09/1985&#8242;</span> <span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">alert</span><span class="br0">&#40;</span> <span class="st0">&#8216;Data valida!&#8217;</span> <span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span></div>
</div>
<p>Lembrando que o metodo test retorna apenas true ou false!</p>
<p><strong>O objeto String.</strong></p>
<p>O objeto String contem alguns metodos que podemos usar expressões regulares, são eles:</p>
<ul>
<li>match &#8211; Semelhante ao metodo exec do objeto RegExp retorna um array com os resultados</li>
<li>search &#8211; Procura por um casamento na string e torna a posição que encontrou o casamento ou -1 caso não consiga casar o padrão.</li>
<li>replace &#8211; Substitui um padrão por uma outra string</li>
<li>split &#8211; Quebra a string em nos locais que encontrar o padrão.</li>
</ul>
<p>Para mostrar os metodos do objeto String vamos primeiro definir uma expressão regular para validação de email:</p>
<div class="codesnip-container" >
<div class="javascript codesnip" style="font-family:monospace;"><span class="kw2">var</span> regex <span class="sy0">=</span> <span class="co2">/[A-Za-z0-9_.-]+@([A-Za-z0-9_]+\.)+[A-Za-z]{2,4}/</span><span class="sy0">;</span></div>
</div>
<p>E agora vamos propor a seguinte string:</p>
<div class="codesnip-container" >
<div class="javascript codesnip" style="font-family:monospace;"><span class="kw2">var</span> string <span class="sy0">=</span> <span class="st0">&#8216;Se alguem quiser comprar minha moto por favor encaminhe um email para diegoholiveira@yahoo.com.br&#8217;</span><span class="sy0">;</span></div>
</div>
<p>Primeiro vou mostrar o metodo match, cujo retorno é exatemente igual do metodo exec do objeto RegExp.</p>
<div class="codesnip-container" >
<div class="javascript codesnip" style="font-family:monospace;"><span class="kw2">var</span> retorno <span class="sy0">=</span> string.<span class="me1">match</span><span class="br0">&#40;</span> regex <span class="br0">&#41;</span><span class="sy0">;</span></div>
</div>
<p>Observe acima que ao inves de construir a expressão regular como parametro do metodo match eu apenas passei um objeto do tipo RegExp. É importante lembrar que os metodos do objeto RegExp aceitam objetos do tipo String como parametros, e os metodos que usam expressões regulares do objeto String aceitam objetos do tipo RegExp como parametros. Confuso? Imagine isso:</p>
<div class="codesnip-container" >
<div class="javascript codesnip" style="font-family:monospace;"><span class="kw2">var</span> RegExp.<span class="me1">test</span><span class="br0">&#40;</span> String <span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// Objeto do tipo RegExp recebendo como parametro um objeto do tipo String</span><br />
<span class="kw2">var</span> String.<span class="me1">search</span><span class="br0">&#40;</span> RegExp <span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// Objeto do tipo String recebendo como parametro um objeto do tipo RegExp</span></div>
</div>
<p>Voltando ao retorno do nosso metodo match, veja que o casamento sempre estará no indice zero e nos demais indices acima de zero estarão os grupos casados.</p>
<p>Agora o metodo search: ele é bem simples, apenas retorna a posição em que ele casou o padrão, ou -1 caso ele não tenha casado o padrão. Neste caso podemos fazer uma condição do tipo:</p>
<div class="codesnip-container" >
<div class="javascript codesnip" style="font-family:monospace;"><span class="kw1">if</span> <span class="br0">&#40;</span>string.<span class="me1">search</span><span class="br0">&#40;</span> regex <span class="br0">&#41;</span> <span class="sy0">!=</span> <span class="sy0">-</span>1<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">alert</span><span class="br0">&#40;</span> <span class="st0">&#8216;Encontrou um endereço de email no texto&#8217;</span> <span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span></div>
</div>
<p>Agora um metodo muito legal, o replace. Sem muito o que falar, ele apenas substitui uma padrão casado por outra coisa (string, numero&#8230;). Vamos supor que nos queiramos proibir a publicação de emails pessoais, e na string acima esta meu email, neste caso fariamos isso:</p>
<div class="codesnip-container" >
<div class="javascript codesnip" style="font-family:monospace;"><span class="kw3">alert</span><span class="br0">&#40;</span> string.<span class="me1">replace</span><span class="br0">&#40;</span>regex<span class="sy0">,</span> <span class="st0">&#8216;PROIBIDO DIVULGAR EMAIL&#8217;</span><span class="br0">&#41;</span> <span class="br0">&#41;</span><span class="sy0">;</span></div>
</div>
<p>O ultimo metodo da nossa lista, o split. O proposito dele é quebrar uma string onde casar o padrão. Sabendo disso, vamos usa-lo para capturar o dominio de um email. Vejamos:</p>
<div class="codesnip-container" >
<div class="javascript codesnip" style="font-family:monospace;"><span class="kw2">var</span> email <span class="sy0">=</span> <span class="st0">&#8216;diegoholiveira@yahoo.com.br&#8217;</span><span class="sy0">;</span><br />
<span class="kw2">var</span> retorno <span class="sy0">=</span> email.<span class="me1">split</span><span class="br0">&#40;</span> <span class="co2">/[@]/</span> <span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="kw3">alert</span><span class="br0">&#40;</span> <span class="st0">&#8216;Dominio é: &#8216;</span> <span class="sy0">+</span> retorno<span class="br0">&#91;</span>1<span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</div>
<p>Neste caso o retorno da quebra acima seria o array:</p>
<div class="codesnip-container" >
<div class="javascript codesnip" style="font-family:monospace;">array <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="nu0">0</span> <span class="sy0">=&gt;</span> diegoholiveira<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="nu0">1</span> <span class="sy0">=&gt;</span> yahoo.<span class="me1">com</span>.<span class="me1">br</span><br />
<span class="br0">&#125;</span></div>
</div>
<p>É isso. Espero que seja util. E lembre-se, se encontrar erros por ai me avise, pois será importante no meu aprendizado. <img src='http://www.diegoholiveira.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.diegoholiveira.com/blog/2009/01/26/expressoes-regulares-com-javascript/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>PHP.JS &#8211; Funções PHP portadas para Javascript</title>
		<link>http://www.diegoholiveira.com/blog/2008/08/21/phpjs-funcoes-php-portadas-para-javascript/</link>
		<comments>http://www.diegoholiveira.com/blog/2008/08/21/phpjs-funcoes-php-portadas-para-javascript/#comments</comments>
		<pubDate>Thu, 21 Aug 2008 17:40:27 +0000</pubDate>
		<dc:creator>Diego Henrique</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.diegoholiveira.com/blog/?p=9</guid>
		<description><![CDATA[Quem programa em PHP já esta acustumado com as funções internas da linguagem e sabe que elas facilitam em muito a vida do desenvolvedor. Outro dia navegando na internet me deparei com essa biblioteca que porta as funções PHP para Javascript, achei muito interessante poder usar no Javascript as mesmas funções que eu já uso [...]]]></description>
			<content:encoded><![CDATA[<p>Quem programa em PHP já esta acustumado com as funções internas da linguagem e sabe que elas facilitam em muito a vida do desenvolvedor.<br />
Outro dia navegando na internet me deparei com essa biblioteca que porta as funções PHP para Javascript, achei muito interessante poder usar no Javascript as mesmas funções que eu já uso no PHP para tratar strings, manipular array&#8217;s e diversas outras coisas.</p>
<p>O melhor é que essa biblioteca tem apenas 41KB (na versão empacotada).</p>
<p>Vejam exemplos e baixem no site do autor: <a href="http://kevin.vanzonneveld.net/techblog/category/php2js/" target="_blank">http://kevin.vanzonneveld.net/techblog/category/php2js/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.diegoholiveira.com/blog/2008/08/21/phpjs-funcoes-php-portadas-para-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
