<?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>Leonardo Bighi &#187; PHP</title>
	<atom:link href="http://leonardobighi.com/category/php/feed" rel="self" type="application/rss+xml" />
	<link>http://leonardobighi.com</link>
	<description>Programação, Rails, Tecnologia.. tudo com um toque pessoal</description>
	<lastBuildDate>Thu, 19 Mar 2009 12:09:35 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>2 plugins interessantes para CakePHP</title>
		<link>http://leonardobighi.com/php/72/plugins-interessantes-para-cakephp</link>
		<comments>http://leonardobighi.com/php/72/plugins-interessantes-para-cakephp#comments</comments>
		<pubDate>Wed, 03 Dec 2008 13:25:42 +0000</pubDate>
		<dc:creator>Bighi</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[cakephp]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[validação]]></category>

		<guid isPermaLink="false">http://leonardobighi.com/?p=72</guid>
		<description><![CDATA[Uma das coisas que eu mais gostei ao programar com Ruby On Rails foi o seu sistema de plugins. Como estou trabalhando com o CakePHP, que é copiado inspirado no Rails, resolvi dar uma olhada nos plugins que ele tinha online e acabei encontrando muita coisa boa. De tudo que vi, dois me chamaram a [...]


No related posts.]]></description>
			<content:encoded><![CDATA[<p>Uma das coisas que eu mais gostei ao programar com Ruby On Rails foi o seu sistema de plugins. Como estou trabalhando com o CakePHP, que é <span style="text-decoration: line-through;">copiado</span> inspirado no Rails, resolvi dar uma olhada nos plugins que ele tinha online e acabei encontrando muita coisa boa. De tudo que vi, dois me chamaram a atenção:</p>
<h2>URL Aliasing</h2>
<p>Há uns dias eu postei como capturar missing_actions (quando o usuário acessa uma URL com action que não existe) e redirecionar para um controller que lidaria com o problema. Muito legal, mas não resolve o problema quando a URL aponta também para um controller que não existe.</p>
<p>O plugin URL Aliasing resolve exatamente esse problema, fornecendo um meio bem simples de lidar com erros de missing_controller.</p>
<p><a href="http://cakeforge.org/snippet/detail.php?type=snippet&amp;id=66" rel="nofollow" title="CakePHP: URL Aliasing" >Link: URL Aliasing</a></p>
<h2>Symbi0nt&#8217;s Model Validation</h2>
<p>Este não é exatamente um plugin, e sim um app_model.php pré-construído com métodos que facilitam bastante a parte de validação de dados do Model.</p>
<p>O principal é que ele define uma série de constantes com validações pré-definidas. Em vez de escrever suas validações, você usa constantes como VALID_IF_NOT_EMPTY, e VALID_IF_EMAIL. A mensagem de erro é especificada por você, então pode ser usado perfeitamente em projetos que não sejam em inglês.</p>
<p><a href="http://cakeforge.org/snippet/detail.php?type=snippet&amp;id=138" rel="nofollow" title="CakePHP: Model Validation" >Link: Symbi0nt&#8217;s Model Validation</a></p>
<p><a href="http://cakeforge.org/snippet/detail.php?type=snippet&amp;id=139" rel="nofollow" title="CakePHP: Exemplos de Model Validation" >Link: Exemplos de uso</a></p>


<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://leonardobighi.com/php/72/plugins-interessantes-para-cakephp/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Redirecionando endereços inválidos no CakePHP</title>
		<link>http://leonardobighi.com/php/54/redirecionando-enderecos-invalidos-no-cakephp</link>
		<comments>http://leonardobighi.com/php/54/redirecionando-enderecos-invalidos-no-cakephp#comments</comments>
		<pubDate>Thu, 06 Nov 2008 13:59:46 +0000</pubDate>
		<dc:creator>Bighi</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[cakephp]]></category>
		<category><![CDATA[dicas]]></category>

		<guid isPermaLink="false">http://leonardobighi.com/?p=54</guid>
		<description><![CDATA[Acho que já falei aqui sobre a minha paixão pelo Ruby on Rails, um framework de Ruby que me fez enxergar o desenvolvimento web de uma forma bem diferente. Percebi que as coisas poderiam ser feitas de uma forma muito mais rápida. Há cerca de 3 semanas comecei a trabalhar com o framework CakePHP, que [...]


No related posts.]]></description>
			<content:encoded><![CDATA[<p>Acho que já falei aqui sobre a minha paixão pelo Ruby on Rails, um framework de Ruby que me fez enxergar o desenvolvimento web de uma forma bem diferente. Percebi que as coisas poderiam ser feitas de uma forma muito mais rápida. Há cerca de 3 semanas comecei a trabalhar com o framework CakePHP, que é uma cópia do Ruby on Rails para a linguagem PHP, e nesse pouco tempo já aprendi algumas coisas que posso compartilhar.</p>
<p>Essa semana um <del datetime="2008-11-07T13:50:50+00:00">trouxa </del>moço muito simpático aqui do trabalho queria uma forma de redirecionar pra uma certa página caso o usuário digitasse um endereço inexistente dentro do site criado com o cake. A primeira coisa que se pensa é procurar um jeito de fazer isso através das rotas, mas eu procurei e não encontrei nenhuma forma de criar uma rota específica para controllers ou actions não existentes.</p>
<p>Como fazer, então? A solução é usar um misto dos recursos do Cake, com o básico do próprio PHP. Que venha a nós o beforeFilter e a herança de classes.</p>
<h3>Como Redirecionar Endereços Inválidos</h3>
<p>O CakePHP permite que você defina um método beforeFilter nos seus controllers, que será chamado antes da action (método do controller) ser chamada pelo framework. E como queremos que TODOS os nossos controllers saibam responder a um endereço inexistente, a melhor opção é criar o método beforeFilter no app_controller.php</p>
<p>Se seu projeto no cake ainda não tem o app_controller, é só você criar um arquivo chamado app_controller.php dentro da pasta app (e não na pasta controllers), e dentro dele colocar o código:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000000; font-weight: bold;">class</span> AppController <span style="color: #000000; font-weight: bold;">extends</span> Controller <span style="color: #009900;">&#123;</span>
&nbsp;
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>E dentro da classe vamos adicionar nosso beforeFilter:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000000; font-weight: bold;">class</span> AppController <span style="color: #000000; font-weight: bold;">extends</span> Controller <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">function</span> beforeFilter<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span><span style="color: #990000;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>params<span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'action'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;&amp;</span>amp<span style="color: #339933;">;</span> <span style="color: #339933;">!</span><span style="color: #990000;">method_exists</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>params<span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'action'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$this</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>redirect<span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'controller'</span> <span style="color: #339933;">=&amp;</span>gt<span style="color: #339933;">;</span> <span style="color: #0000ff;">'main'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'action'</span> <span style="color: #339933;">=&amp;</span>gt<span style="color: #339933;">;</span> <span style="color: #0000ff;">'missing'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>O que fizemos acima? A função method_exists é um recurso do PHP que testa se um método existe em um dado objeto. Passamos <em>$this</em> como o objeto, e <em>$this-&gt;params['action']</em> como o método a testar. Se retornar <em>false</em> significa que a action não existe, e o usuário está tentando acessar uma action inexistente. Então o <em>beforeFilter</em> redireciona o usuário pra um lugar que realmente existe, antes mesmo que o <strong>framework </strong>tente chamar a action. Do exemplo acima, você pode trocar o controller <em>&#8216;main&#8217;</em> e a action <em>&#8216;missing&#8217;</em> pelo que for melhor para o seu projeto. Basta ter certeza de que está redirecionando pra um controller e uma action que realmente existam.</p>
<p>Note que isso só funciona se o usuário tentar acessar um endereço que aponte para uma action inválida, mas em um controller válido. Se o usuário acessar apenas site.com/pudim, o <strong>CakePHP </strong>vai buscar um controller pudim e aí vai dar erro mesmo. Uma solução possível seria criar uma rota definindo que caso acessem um endereço com apenas um parâmetro depois do domínio, ele redirecione pra um controller específico e passe aquele parâmetro único como rota. Pra quem não sabe configurar as rotas, amanhã eu explico.</p>


<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://leonardobighi.com/php/54/redirecionando-enderecos-invalidos-no-cakephp/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
