<?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>Cauan Cabral - Geek &#187; CakePHP</title>
	<atom:link href="http://cauancabral.net/tag/cakephp/feed/" rel="self" type="application/rss+xml" />
	<link>http://cauancabral.net</link>
	<description>Geek, nerd e apaixonado por tecnologia</description>
	<lastBuildDate>Fri, 25 Jun 2010 23:31:18 +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>Dica Rápida &#8211; Otimizando código</title>
		<link>http://cauancabral.net/2010/02/08/dica-rapida-otimizando-codigo/</link>
		<comments>http://cauancabral.net/2010/02/08/dica-rapida-otimizando-codigo/#comments</comments>
		<pubDate>Tue, 09 Feb 2010 01:12:36 +0000</pubDate>
		<dc:creator>Cauan Cabral</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[dica]]></category>
		<category><![CDATA[otimização]]></category>
		<category><![CDATA[qualidade]]></category>

		<guid isPermaLink="false">http://cauancabral.net/?p=203</guid>
		<description><![CDATA[Há um bom tempo atrás rolou uma discussão na lista do PHPMS sobre um comparativo de performance entre PHP x Python x Ruby x Perl. Bom, a conclusão que tirei do comparativo foi de que a velocidade de execução é &#8230; <a href="http://cauancabral.net/2010/02/08/dica-rapida-otimizando-codigo/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Há um bom tempo atrás rolou uma discussão na lista do PHPMS sobre um <a title="PHP x Python x Ruby x Perl" href="http://groups.google.com/group/phpms/browse_thread/thread/f4e76f4d94763866/f76cb1b77f28a25b" onclick="pageTracker._trackPageview('/outgoing/groups.google.com/group/phpms/browse_thread/thread/f4e76f4d94763866/f76cb1b77f28a25b?referer=');">comparativo de performance</a> entre PHP x Python x Ruby x Perl.</p>
<p>Bom, a conclusão que tirei do comparativo foi de que a velocidade de execução é importante, mas mais do que isso, o programador é essencial. No exemplo da thread supracitada, o PHP perdia feio para as outras linguagens, mas olhando para o código escrito em PHP, dava para notar  vários erros de uso da linguagem e suas funções (ponto para o <a href="http://twitter.com/begnini" onclick="pageTracker._trackPageview('/outgoing/twitter.com/begnini?referer=');">Begnini</a> que viu o código antes de todos).</p>
<p>Então a dica de hoje é: estude bem a linguagem. Procure a saber o funcionamento das funções e construções da linguagem, isso é essencial para se tornar um bom programador.</p>
<p>Exemplos de código</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">//uso comum</span>
<span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$i</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #990000;">count</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$var</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&lt;</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #000088;">$i</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
  <span style="color: #339933;">...</span>
&nbsp;
<span style="color: #666666; font-style: italic;">//forma mais adequada</span>
<span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$i</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #000088;">$c</span> <span style="color: #339933;">=</span> <span style="color: #990000;">count</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$var</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000088;">$c</span> <span style="color: #339933;">&lt;</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #339933;">++</span><span style="color: #000088;">$i</span><span style="color: #009900;">&#41;</span>
 <span style="color: #339933;">...</span>
&nbsp;
<span style="color: #666666; font-style: italic;">//outro caso, ao invés de forçar várias verificações</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$a</span> <span style="color: #339933;">&gt;</span> <span style="color: #cc66cc;">100</span> <span style="color: #009900;">&#41;</span>
 <span style="color: #339933;">...</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$a</span> <span style="color: #339933;">&lt;</span> <span style="color: #cc66cc;">100</span> <span style="color: #009900;">&#41;</span>
 <span style="color: #339933;">...</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$a</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">100</span> <span style="color: #009900;">&#41;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">//use a estrutura adequada</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$a</span> <span style="color: #339933;">&gt;</span> <span style="color: #cc66cc;">100</span> <span style="color: #009900;">&#41;</span>
 <span style="color: #339933;">...</span>
<span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$a</span> <span style="color: #339933;">&lt;</span> <span style="color: #cc66cc;">100</span> <span style="color: #009900;">&#41;</span>
 <span style="color: #339933;">...</span>
<span style="color: #b1b100;">else</span> <span style="color: #666666; font-style: italic;">//não precisa fazer o último teste</span>
 <span style="color: #339933;">...</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// esse último caso que me inspirou a fazer o post</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// a pessoa só queria saber se o array $var tava vazio, e para isso contou todos os seus elementos</span>
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #990000;">count</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$var</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&gt;</span> <span style="color: #cc66cc;">0</span> <span style="color: #009900;">&#41;</span>
 <span style="color: #339933;">...</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// enquanto ela poderia ter usado uma verificação direta como</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;">$var</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span></pre></div></div>

<p>Este último caso, que motivou o post foi visto no changelog da versão 1.2.6 do CakePHP. Neste caso o &#8220;erro&#8221; foi encontrado e corrigido pelo brasileiro <a title="Blog do Juan Basso" href="http://blog.cakephp-brasil.org/" onclick="pageTracker._trackPageview('/outgoing/blog.cakephp-brasil.org/?referer=');">Juan Basso</a> neste <a title="Commit do Juan Basso para o CakePHP 1.2.6 - otimizações" href="http://github.com/cakephp/cakephp1x/commit/a96c157d948e2f3c1fa55b5d422121c323859626" onclick="pageTracker._trackPageview('/outgoing/github.com/cakephp/cakephp1x/commit/a96c157d948e2f3c1fa55b5d422121c323859626?referer=');">commit</a>.</p>
<p>O intuito do post não é meter o dedo na cara de ninguém, apenas alertar para situações onde culpamos uma determinada linguagem pelo desempenho de nossa aplicação quando o problema na verdade é o mal uso que estamos fazendo.</p>
<div id="crp_related"><h3>Outros posts que podem interessar:</h3><ul><li><a href="http://cauancabral.net/2009/02/25/cakephp-duvidas-comuns-2/" rel="bookmark" class="crp_title">CakePHP &#8211; Dúvidas Comuns #2</a></li><li><a href="http://cauancabral.net/2008/01/23/validao-de-dados-em-php5-parte-3/" rel="bookmark" class="crp_title">Valida&#231;&#227;o de dados em PHP5 &#8211; Parte 3</a></li><li><a href="http://cauancabral.net/2009/02/23/cakephp-duvidas-comuns-1/" rel="bookmark" class="crp_title">CakePHP &#8211; dúvidas comuns #1</a></li><li><a href="http://cauancabral.net/2010/01/28/dica-rapida-cakephp-personalizando-as-paginas-de-erros/" rel="bookmark" class="crp_title">Dica Rápida &#8211; CakePHP &#8211; Personalizando as páginas de erros</a></li><li><a href="http://cauancabral.net/2008/09/21/desenvolvimento-rapido/" rel="bookmark" class="crp_title">Desenvolvimento rápido</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://cauancabral.net/2010/02/08/dica-rapida-otimizando-codigo/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>CakePHP 1.3 quase assado</title>
		<link>http://cauancabral.net/2010/01/26/cakephp-1-3-quase-assad/</link>
		<comments>http://cauancabral.net/2010/01/26/cakephp-1-3-quase-assad/#comments</comments>
		<pubDate>Wed, 27 Jan 2010 02:49:50 +0000</pubDate>
		<dc:creator>Cauan Cabral</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[CakePHP-1.3]]></category>
		<category><![CDATA[desenvolvimento]]></category>

		<guid isPermaLink="false">http://cauancabral.net/?p=178</guid>
		<description><![CDATA[Pouco mais de um ano após o lançamento da versão 1.2.0 do CakePHP, está para ser lançado, dia 13 de fevereiro, a versão 1.3 deste poderoso framework. Tenho feito alguns testes em cima dele, estou inclusive reescrevendo um pequeno CMS &#8230; <a href="http://cauancabral.net/2010/01/26/cakephp-1-3-quase-assad/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Pouco mais de um ano após o lançamento da versão 1.2.0 do CakePHP, está para ser lançado, dia 13 de fevereiro, a versão 1.3 deste poderoso framework.</p>
<p>Tenho feito alguns testes em cima dele, estou inclusive reescrevendo um pequeno CMS que possuímos na empresa em cima desta versão (árvore 1.3-dev do repositório do projeto) e apesar de alguns pequenos bugs (ainda é uma versão de desenvolvimento, né?) esta versão possui muitas melhorias na sintaxe &#8211; que agora está mais concisa &#8211;  e novas funcionalidades.</p>
<p>Para a migração de nossa aplicação, não foi preciso alterar muita coisa, porém para grandes aplicações, deve-se considerar a necessidade do upgrade.</p>
<p>Abaixo segue uma lista de links para algumas páginas com informações sobre esta nova versão do CakePHP (todas em inglês):</p>
<ul>
<li><a title="TODO list do CakePHP 1.3" href="http://cakephp.lighthouseapp.com/projects/42648/13-todo-list" onclick="pageTracker._trackPageview('/outgoing/cakephp.lighthouseapp.com/projects/42648/13-todo-list?referer=');">Lista de <em>TODO</em> (tudo que já foi realizado está riscado)</a></li>
<li><a title="Lista de novas funcionalidades/recursos do CakePHP 1.3" href="http://cakephp.lighthouseapp.com/projects/42648/13-new-features" onclick="pageTracker._trackPageview('/outgoing/cakephp.lighthouseapp.com/projects/42648/13-new-features?referer=');">Novas <em>features</em></a></li>
<li><a title="Guia de migração de uma aplicação utilizando CakePHP da versão 1.2 para a 1.3" href="http://cakephp.lighthouseapp.com/projects/42648/13-migration-guide" onclick="pageTracker._trackPageview('/outgoing/cakephp.lighthouseapp.com/projects/42648/13-migration-guide?referer=');">Guia de migração (upgrade de aplicação feita com o CakePHP 1.2 para 1.3)</a></li>
</ul>
<p>Caso tenha interesse em ajudar os desenvolvedores, baixe a <a title="Fonte do CakePHP 1.3 no GitHub" href="http://github.com/cakephp/cakephp1x/tree/1.3" onclick="pageTracker._trackPageview('/outgoing/github.com/cakephp/cakephp1x/tree/1.3?referer=');">versão em desenvolvimento</a> e faça alguns testes. Só não esqueça de <a title="Tickets do Cake 1.x" href="http://cakephp.lighthouseapp.com/projects/42648-cakephp-1x/tickets" onclick="pageTracker._trackPageview('/outgoing/cakephp.lighthouseapp.com/projects/42648-cakephp-1x/tickets?referer=');">reportar</a> eventuais problemas ou patchs que você venha a produzir. Não se preocupem com o tempo de resposta da equipe de desenvolvimento, eles realmente estão empenhados em fazer um bom trabalho, é possível que tenha feedback de seu ticket/patch em menos de 1 hora &#8211; experiência própria.</p>
<p>Logo que concluir algumas tarefas e tiver feito mais testes colocarei aqui meu &#8220;parecer&#8221; sobre a nova versão, enquanto isso <a title="Informações de desenvolvimento do CakePHP 1.x" href="http://cakephp.lighthouseapp.com/projects/42648-cakephp-1x/overview" onclick="pageTracker._trackPageview('/outgoing/cakephp.lighthouseapp.com/projects/42648-cakephp-1x/overview?referer=');">acompanhe a página de desenvolvimento</a> para ficar por dentro das atualizações.</p>
<div id="crp_related"><h3>Outros posts que podem interessar:</h3><ul><li><a href="http://cauancabral.net/2010/04/05/comitiva-cuide-bem-do-seu-evento/" rel="bookmark" class="crp_title">Comitiva &#8211; Cuide bem do seu evento</a></li><li><a href="http://cauancabral.net/2008/09/21/desenvolvimento-rapido/" rel="bookmark" class="crp_title">Desenvolvimento rápido</a></li><li><a href="http://cauancabral.net/2010/04/11/obrigado-pelos-peixes-svn/" rel="bookmark" class="crp_title">Obrigado pelos peixes SVN</a></li><li><a href="http://cauancabral.net/2010/01/30/joomla-1-6-o-que-esta-para-chegar/" rel="bookmark" class="crp_title">Joomla! 1.6 &#8211; O que está para chegar&#8230;</a></li><li><a href="http://cauancabral.net/2010/01/17/trabalhando-com-php-5-2-no-opensuse-11-2-downgrade-do-php-5-3-para-5-2/" rel="bookmark" class="crp_title">Trabalhando com PHP 5.2 no OpenSUSE 11.2 (Downgrade do PHP 5.3 para 5.2)</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://cauancabral.net/2010/01/26/cakephp-1-3-quase-assad/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Trabalhando com PHP 5.2 no OpenSUSE 11.2 (Downgrade do PHP 5.3 para 5.2)</title>
		<link>http://cauancabral.net/2010/01/17/trabalhando-com-php-5-2-no-opensuse-11-2-downgrade-do-php-5-3-para-5-2/</link>
		<comments>http://cauancabral.net/2010/01/17/trabalhando-com-php-5-2-no-opensuse-11-2-downgrade-do-php-5-3-para-5-2/#comments</comments>
		<pubDate>Sun, 17 Jan 2010 12:42:33 +0000</pubDate>
		<dc:creator>Cauan Cabral</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[opensuse]]></category>
		<category><![CDATA[instalação]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php5.3]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://cauancabral.net/?p=167</guid>
		<description><![CDATA[No final de 2009 foi lançado a versão 11.2 do OpenSUSE, e como de costume para esta distro, todos os seus pacotes foram atualizados para a última (ou uma das últimas) versão estável. Isso aconteceu como PHP (que no lançamento &#8230; <a href="http://cauancabral.net/2010/01/17/trabalhando-com-php-5-2-no-opensuse-11-2-downgrade-do-php-5-3-para-5-2/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>No final de 2009 foi lançado a versão 11.2 do OpenSUSE, e como de costume para esta distro, todos os seus pacotes foram atualizados para a última (ou uma das últimas) versão estável. Isso aconteceu como PHP (que no lançamento estava na versão 5.3) como o MySQL (versão 5.1) dentre vários outros.</p>
<p>Acontece que quem trabalha com Drupal, Joomla! ou CakePHP (última  versão estável é a 1.2) deve aguardar ainda para poder utilizar a versão 5.3 do PHP, que <a title="Artigo sobre o PHP 5.3 feito antes de seu lançamento" href="http://phpms.org/artigos/4-codigo/66-o-futuro-do-php" onclick="pageTracker._trackPageview('/outgoing/phpms.org/artigos/4-codigo/66-o-futuro-do-php?referer=');">incluí</a> <a title="Guia de migração para o PHP 5.3" href="http://br2.php.net/migration53" onclick="pageTracker._trackPageview('/outgoing/br2.php.net/migration53?referer=');">várias</a> <a title="Lista de incompatibilidades entre a versão 5.3 e 5.2" href="http://br2.php.net/manual/en/migration53.incompatible.php" onclick="pageTracker._trackPageview('/outgoing/br2.php.net/manual/en/migration53.incompatible.php?referer=');">mudanças</a>, caso contrário eles podem não funcionar ou apresentar vários avisos.</p>
<p>Pesquisando sobre o problema descobri que não há no repositório do OpenSUSE (os oficiais nem nos mais conhecidos) o PHP 5.2 disponível, então como fazer? Baixar o fonte e compila-lo? É uma saída, mas queria algo &#8220;OpenSUSU-like&#8221; (mais fácil).</p>
<p>Dando uma vasculhada no oráculo encontrei <a href="http://www.badzilla.co.uk/openSUSE-11.2-Downgrade-PHP-5.3-to-5.2" onclick="pageTracker._trackPageview('/outgoing/www.badzilla.co.uk/openSUSE-11.2-Downgrade-PHP-5.3-to-5.2?referer=');">openSUSE 11.2: Downgrade PHP 5.3 to 5.2</a></p>
<p>Resolvi adaptar algumas coisas e funcionou perfeitamente, vamos lá aos passos com minhas modificações:</p>
<ol>
<li>Abra o Gerenciador de Software;</li>
<li>Vá no menu &#8220;Configuração&#8221; -&gt; &#8220;Repositórios&#8221;;</li>
<li>Procure o repositório &#8220;Atualizações Para o OpenSUSE 11.2-0&#8243;, clique sobre ele e depois no botão editar, na parte inferior da janela;</li>
<li>No campo &#8220;Diretório do Servidor&#8221; altere o &#8220;11.2&#8243; para &#8220;11.1&#8243; e então clique em OK; Na versão 11.1 o PHP está na versão 5.2</li>
<li>Procure o repositório &#8220;OpenSUSE 11.2 OSS&#8221;, clique sobre ele e depois no botão editar; Este e o próximo passo são necessário caso você deseje fazer o downgrade do MySQL para versão 5.0 (eu recomendo isso para deixar tudo compatível, como era no OpenSUSE 11.1)</li>
<li>No campo &#8220;Diretório do Servidor&#8221; altere o &#8220;11.2&#8243; para &#8220;11.1&#8243; e então clique em OK;</li>
<li>Novamente clique em OK na listagem de repositórios;</li>
<li>De volta a janela de gerenciamento de software, pesquise por PHP5, caso você já tenha instalado o PHP 5.3 aproveite agora para remover tudo relativo a ele, caso contrário selecione os pacotes que precisar e tenha certeza de marcar a versão correta (para mim foi 5.2.11). Verifique a versão de cada pacote clicando sobre ele e em seguida na aba &#8220;Versões&#8221; da janela, se houver mais de uma, marque a relativa ao PHP 5.2.x (onde x for o maior disponível);</li>
<li>Agora, pesquise os pacotes relativos ao MySQL (utilize o termo &#8220;mysql&#8221; na caixa de busca);</li>
<li>Você deve marcar as opções &#8220;libmysqlclient15&#8243;, &#8220;mysql&#8221; e &#8220;mysqlclient&#8221; conferindo se todos estão com a versão selecionada para 5.0.x (onde x é o maior número disponível);</li>
<li>Clique agora em OK para instalar os pacotes, uma janela irá abrir informando a necessidade de instalar alguma dependência. Dê uma olhada se não há conflitos e clique em OK; Agora é só aguardar.</li>
<li>Abra agora o &#8220;Repositórios de Software&#8221; e volte os repositórios para sua configuração original (trocando o 11.1 para 11.2), caso contrário não receberá as últimas atualizações dos outros softwares. Recomendo também que vá ao &#8220;Gerenciador de Software&#8221; e bloqueie os pacotes que instalou, para que o OpenSUSE não tente atualiza-los (os pacotes do PHP e MySQL);</li>
<li>Depois de instalar os pacotes, reinicie seu Apache logando-se como root no terminal e executando o comando &#8220;rcapache2 restart&#8221;; Verifique se o PHP está funcionando corretamente. Deve estar;</li>
<li>No OpenSUSE 11.2 o <a href="http://en.opensuse.org/MySQL-5.1" onclick="pageTracker._trackPageview('/outgoing/en.opensuse.org/MySQL-5.1?referer=');">socket do MySQL mudou de endereço</a>, mas como instalamos a versão antiga do MySQL não teremos essa alteração, porém alguns aplicativos (além do PHP) usam o MySQL (como o meu Amarok), então vamos criar um link simbólico onde deveria ser o endereço novo apontando para o antigo para que não haja problema, faremos isso como root;</li>
<li>Crie o diretório que é padrão para o socket na versão 11.2 do OpenSUSE: mkdir /var/run/mysql</li>
<li>Entre no diretório criado e crie o link simbólico para o socket: ln -s mysql.sock /var/lib/mysql/mysql.sock</li>
<li>Reinicie seu OpenSUSE e bom proveito.</li>
</ol>
<p>Caso tenha alguma dúvida deixe-a nos comentários. Se necessário tiro alguns screenshots para ilustrar melhor.</p>
<div id="crp_related"><h3>Outros posts que podem interessar:</h3><ul><li><a href="http://cauancabral.net/2009/02/06/novidades-de-janeiro/" rel="bookmark" class="crp_title">Novidades de janeiro</a></li><li><a href="http://cauancabral.net/2010/01/26/cakephp-1-3-quase-assad/" rel="bookmark" class="crp_title">CakePHP 1.3 quase assado</a></li><li><a href="http://cauancabral.net/2010/01/30/joomla-1-6-o-que-esta-para-chegar/" rel="bookmark" class="crp_title">Joomla! 1.6 &#8211; O que está para chegar&#8230;</a></li><li><a href="http://cauancabral.net/2010/04/11/obrigado-pelos-peixes-svn/" rel="bookmark" class="crp_title">Obrigado pelos peixes SVN</a></li><li><a href="http://cauancabral.net/2008/01/04/sem-assunto-2/" rel="bookmark" class="crp_title">Sem assunto &#8211; parte 2</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://cauancabral.net/2010/01/17/trabalhando-com-php-5-2-no-opensuse-11-2-downgrade-do-php-5-3-para-5-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Latinoware 2009 &#8211; COLAPHP &#8211; Evento fantástico</title>
		<link>http://cauancabral.net/2010/01/16/latinoware-2009-colaphp-evento-fantastico/</link>
		<comments>http://cauancabral.net/2010/01/16/latinoware-2009-colaphp-evento-fantastico/#comments</comments>
		<pubDate>Sat, 16 Jan 2010 14:56:24 +0000</pubDate>
		<dc:creator>Cauan Cabral</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[Desenvolvimento Web]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[eventos]]></category>
		<category><![CDATA[flex]]></category>
		<category><![CDATA[latinoware]]></category>
		<category><![CDATA[mini-curso]]></category>
		<category><![CDATA[palestra]]></category>

		<guid isPermaLink="false">http://geek.cauancabral.net/?p=155</guid>
		<description><![CDATA[Eae pessoal, tudo tranquilo? Tenho andado bem corrido ultimamente e não tenho conseguido dar a atenção que queria ao blog. De agora em diante as coisas não devem melhorar muito, mas farei o possível para trazer coisas interessantes pra cá. &#8230; <a href="http://cauancabral.net/2010/01/16/latinoware-2009-colaphp-evento-fantastico/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Eae pessoal, tudo tranquilo?</p>
<p>Tenho andado bem corrido ultimamente e não tenho conseguido dar a atenção que queria ao blog. De agora em diante as coisas não devem melhorar muito, mas farei o possível para trazer coisas interessantes pra cá.</p>
<p>Desde o dia 21/10/2009 estou em Foz do Iguaçu &#8211; PR, para participar do Latinoware 2009, um dos maiores eventos de software livre das Américas.<br />
Estou tendo a oportunidade de ministrar um minicurso e apresentar uma palestra no &#8220;subevento&#8221; COLAPHP &#8211; Congresso Latinoamericano de PHP, que possui uma trilha dedicada a linguagem dentro do  Latinoware.</p>
<p>A experiência não poderia estar sendo melhor. Pude conhecer excelentes profissionais e fazer muitas amizades.</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; fim do rascunho 1 &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p>Nos dias 23 e 24 de outubro tive a oportunidade de ministrar um minicurso e uma palestra dentro da trilha COLAPHP do Latinoware.</p>
<p>Ambos tratavam do CakePHP, no caso do minicurso fizemos uma introdução no framework, falando um pouco de seu funcionamento, suas convenções e criamos rapidamente uma aplicação simples utilizando o terminal com o Bake.</p>
<p>O slides utilizado no minicurso foi este:</p>
<p><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=id=2474507&amp;doc=cakephp-091111083152-phpapp01" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><param name="wmode" value="transparent" /><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=id=2474507&amp;doc=cakephp-091111083152-phpapp01" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355" wmode="transparent"></embed></object></p>
<p>No caso da palestra, falei novamente sobre a integração de aplicações escritas em CakePHP e Flex, dando uma revisada na apresentação. Ela ficou assim:</p>
<p><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=id=2928697&amp;doc=flexphp-100116083159-phpapp02" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><param name="wmode" value="transparent" /><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=id=2928697&amp;doc=flexphp-100116083159-phpapp02" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355" wmode="transparent"></embed></object></p>
<p>Aproveito o espaço (e a disponibilidade de tempo) para agradecer todos que participaram do evento como um todo, seja na organização, apoio ou assistindo, perguntando, corrigindo e ajudando a gente durante as apresentações. Obrigado a todos.</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;- fim do rascunho 2 &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p>O texto do rascunho 1 foi escrito em 23/10/2009, o do rascunho 2 logo após o evento, hoje é 16/01/2010 e o textos ainda estevam como rascunho para ser publicado no blog. Pois é, esse final de ano foi realmente muito corrido, mas valeu a pena.</p>
<p>Agora é hora de se organizar para poder ter um 2010 ainda mais proveitoso (de começo ele já está sendo muito melhor).</p>
<p>Até breve.</p>
<div id="crp_related"><h3>Outros posts que podem interessar:</h3><ul><li><a href="http://cauancabral.net/2009/07/11/1%c2%ba-workshop-phpms-php-extremo-sucesso/" rel="bookmark" class="crp_title">1º Workshop PHPMS &#8211; PHP Extremo, SUCESSO</a></li><li><a href="http://cauancabral.net/2009/09/24/2%c2%ba-workshop-phpms/" rel="bookmark" class="crp_title">2º Workshop PHPMS</a></li><li><a href="http://cauancabral.net/2008/09/21/software-freedom-day-08-sucesso/" rel="bookmark" class="crp_title">Software Freedom Day 08 &#8211; Sucesso!</a></li><li><a href="http://cauancabral.net/2008/05/08/voltando-a-ativa-no-bom-sentido/" rel="bookmark" class="crp_title">Voltando a ativa ( no bom sentido )</a></li><li><a href="http://cauancabral.net/2009/06/14/workshop-php-extremo/" rel="bookmark" class="crp_title">Workshop PHP Extremo</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://cauancabral.net/2010/01/16/latinoware-2009-colaphp-evento-fantastico/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>1º Workshop PHPMS &#8211; PHP Extremo, SUCESSO</title>
		<link>http://cauancabral.net/2009/07/11/1%c2%ba-workshop-phpms-php-extremo-sucesso/</link>
		<comments>http://cauancabral.net/2009/07/11/1%c2%ba-workshop-phpms-php-extremo-sucesso/#comments</comments>
		<pubDate>Sun, 12 Jul 2009 03:42:54 +0000</pubDate>
		<dc:creator>Cauan Cabral</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[eventos]]></category>
		<category><![CDATA[amf]]></category>
		<category><![CDATA[flex]]></category>
		<category><![CDATA[phpms]]></category>
		<category><![CDATA[slides]]></category>
		<category><![CDATA[workshop]]></category>

		<guid isPermaLink="false">http://geek.cauancabral.net/?p=132</guid>
		<description><![CDATA[É com grande alegria que informo a todos o sucesso que atingimos com a realização de nosso primeiro Workshop. Tudo no evento saiu melhor do que esperado (menos um pedacinho da minha apresentação, mas isso é detalhe,hehehe). Tivemos público maior &#8230; <a href="http://cauancabral.net/2009/07/11/1%c2%ba-workshop-phpms-php-extremo-sucesso/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>É com grande alegria que informo a todos o sucesso que atingimos com a realização de nosso primeiro Workshop. Tudo no evento saiu melhor do que esperado (menos um pedacinho da minha apresentação, mas isso é detalhe,hehehe).</p>
<p>Tivemos público maior do que o esperado, e todos muito participativos, a quantidade de empresas apoiando também foi grande &#8211; principalmente se pegarmos como referência outros eventos de Campo Grande. O nível das apresentações também estavam muito bem definido. Enfim, se melhorasse era perigoso estragar.</p>
<p>Passei a última semana inteira preparando minha apresentação no workshop, inclusive quase não durmi essa noite (3 horas exatas), mas no final tudo aconteceu dentro dos conformes. A participação dos presentes foi outro ponto que me chamou a atenção, serviu para provar que quem estava ali realmente sabia o que estava fazendo ali.</p>
<p>Quero aproveeitar mais uma vez para agradecer a todos que ajudaram de alguma forma no evento: organizadores e amigos<a title="Blog do PorKaria" href="http://porkaria.wordpress.com" onclick="pageTracker._trackPageview('/outgoing/porkaria.wordpress.com?referer=');"> (porkaria, </a><a title="Blog do José Ricardo, vulgo zehzinho" href="http://josericardo.eti.br" onclick="pageTracker._trackPageview('/outgoing/josericardo.eti.br?referer=');">zehzinho</a>, Leonardo), o sempre disposto palestrante e amigo <a title="Raphox homepage" href="http://sites.google.com/site/raphoxaraujo/" onclick="pageTracker._trackPageview('/outgoing/sites.google.com/site/raphoxaraujo/?referer=');">Raphael</a> (raphox), aos apoiadores, aos patrocinadores e claro, a todos os presentes que acreditaram no evento e compareceram mesmo com o tempo ruim.</p>
<p>Para quem foi ao evento e gostaria de ver a apresentação de slides que utilizei, ela está acessível pelo endereço:<a title="Slidshare - PHP + Flex" href="http://www.slideshare.net/cauancabral/php-flex" onclick="pageTracker._trackPageview('/outgoing/www.slideshare.net/cauancabral/php-flex?referer=');"> http://www.slideshare.net/cauancabral/php-flex</a><br />
Na apresentação falei sobre a utilização de Flex para construção de RIA&#8217;s juntamente com PHP (mais especificamente utilizando o framework  CakePHP), o exemplo da palestra pode ser encontrado no repositório svn: http://svn.radig.com.br/pagode &#8211; na data da  palestra a versão utilizada foi a #3, o sistema será complementado até que se torne realmente um sistema de controle financeiro pessoal. Portanto se tiver interesse no mesmo, acompanhe aqui no blog as novidades do projeto.</p>
<p>&#8212;&#8212;&#8212;-</p>
<p>O Raphox e o Porkaria também liberaram os slides das palestras, veja <a title="PorKaria - PHP no Mundo Mobile" href="http://www.slideshare.net/porkaria/php-no-mundo-mobile" onclick="pageTracker._trackPageview('/outgoing/www.slideshare.net/porkaria/php-no-mundo-mobile?referer=');">aqui</a> e a<a title="Slides do Raphox - ORM" href="http://docs.google.com/Presentation?id=ajfp9mn744m4_8dbxjj8hh" onclick="pageTracker._trackPageview('/outgoing/docs.google.com/Presentation?id=ajfp9mn744m4_8dbxjj8hh&amp;referer=');">qui</a> respectivamente.</p>
<div id="crp_related"><h3>Outros posts que podem interessar:</h3><ul><li><a href="http://cauancabral.net/2010/04/05/comitiva-cuide-bem-do-seu-evento/" rel="bookmark" class="crp_title">Comitiva &#8211; Cuide bem do seu evento</a></li><li><a href="http://cauancabral.net/2010/01/16/latinoware-2009-colaphp-evento-fantastico/" rel="bookmark" class="crp_title">Latinoware 2009 &#8211; COLAPHP &#8211; Evento fantástico</a></li><li><a href="http://cauancabral.net/2008/09/21/software-freedom-day-08-sucesso/" rel="bookmark" class="crp_title">Software Freedom Day 08 &#8211; Sucesso!</a></li><li><a href="http://cauancabral.net/2010/03/20/3%c2%ba-workshop-do-phpms/" rel="bookmark" class="crp_title">3º Workshop do PHPMS</a></li><li><a href="http://cauancabral.net/2009/09/24/2%c2%ba-workshop-phpms/" rel="bookmark" class="crp_title">2º Workshop PHPMS</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://cauancabral.net/2009/07/11/1%c2%ba-workshop-phpms-php-extremo-sucesso/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CakePHP &#8211; Dúvidas Comuns #2</title>
		<link>http://cauancabral.net/2009/02/25/cakephp-duvidas-comuns-2/</link>
		<comments>http://cauancabral.net/2009/02/25/cakephp-duvidas-comuns-2/#comments</comments>
		<pubDate>Thu, 26 Feb 2009 00:36:54 +0000</pubDate>
		<dc:creator>Cauan Cabral</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[Desenvolvimento Web]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[i10n]]></category>
		<category><![CDATA[i18n]]></category>
		<category><![CDATA[validação]]></category>

		<guid isPermaLink="false">http://geek.cauancabral.net/?p=111</guid>
		<description><![CDATA[Dúvida: Como usar habilitar a internacionalização &#8211; o famoso I18N &#8211; nos erros de validação de seu modelo? Fácil? Como fazer então no próprio modelo para não repetir frases em várias Views? Habilitar a internacionalização e ter a localização em &#8230; <a href="http://cauancabral.net/2009/02/25/cakephp-duvidas-comuns-2/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Dúvida: Como usar habilitar a internacionalização &#8211; o famoso I18N &#8211; nos erros de validação de seu modelo? Fácil? Como fazer então no próprio modelo para não repetir frases em várias Views?</p>
<p>Habilitar a internacionalização e ter a localização em uma aplicação com CakePHP desde a versão 1.2  é relativamente simples: basta uma lida no nosso <a title="Internacionalizando uma aplicação em CakePHP" href="http://book.cakephp.org/pt/view/161/Internacionalizando" onclick="pageTracker._trackPageview('/outgoing/book.cakephp.org/pt/view/161/Internacionalizando?referer=');">Cookbook</a> e pronto.</p>
<p>Outra coisa que é relativamente simples de se fazer é validar os dados, basta termos um atributo em nosso modelo chamado &#8220;validate&#8221; e seguir as dicas do <a title="Validação de dados com CakePHP" href="http://book.cakephp.org/pt/view/125/Valida%C3%A7%C3%A3o-de-dados" onclick="pageTracker._trackPageview('/outgoing/book.cakephp.org/pt/view/125/Valida_C3_A7_C3_A3o-de-dados?referer=');">livro de receitas</a>.</p>
<p>Mas pelo Cookbook somos induzidos a fornecer a mensagem de erro na hora de criar a View, algo que eu particularmente não gosto. É até comum termos um modelo que é usado por Controllers diferentes e consequêntemente por Views diferentes.</p>
<p>Uma maneira de evitar isso, é definir as mensagens de erro já na definição das regras de validação, dentro do atributo &#8220;validate&#8221; do seu modelo. O grande problema é que para traduzir uma determinada expressão utilizamos um método, e a chamada de método na definição estática de um atributo não é permitida no PHP (dúvida? tente fazer o código abaixo)</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> Modelo <span style="color: #000000; font-weight: bold;">extends</span> AppModel <span style="color: #009900;">&#123;</span>
<span style="color: #000000; font-weight: bold;">var</span> <span style="color: #000088;">$validate</span> <span style="color: #339933;">=</span> _<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'ola mundo'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #666666; font-style: italic;">//esse código não devera ser executado</span></pre></div></div>

<p>A solução para isso é a atribuição das regras de validação no momento da instanciação da classe, ou seja, no seu método construtor, da seguinte maneira</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"> <span style="color: #000000; font-weight: bold;">class</span> Modelo <span style="color: #000000; font-weight: bold;">extends</span> AppModel <span style="color: #009900;">&#123;</span>
<span style="color: #000000; font-weight: bold;">var</span> <span style="color: #000088;">$validate</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">function</span> __construct<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
parent<span style="color: #339933;">::</span>__construct<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">validate</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span> <span style="color: #666666; font-style: italic;">/* aqui você pode definir as regras e mensagens,mesmo chamando um método */</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Qualquer dúvida não deixem de utilizar os comentários ;]</p>
<p>&#8212;&#8212;&#8211;<br />
Atualizado: havia esquecido da chamada ao construtor da superclasse AppModels ( através do parent::__construct() ) no último código mostrado.</p>
<div id="crp_related"><h3>Outros posts que podem interessar:</h3><ul><li><a href="http://cauancabral.net/2009/02/23/cakephp-duvidas-comuns-1/" rel="bookmark" class="crp_title">CakePHP &#8211; dúvidas comuns #1</a></li><li><a href="http://cauancabral.net/2010/01/28/dica-rapida-cakephp-personalizando-as-paginas-de-erros/" rel="bookmark" class="crp_title">Dica Rápida &#8211; CakePHP &#8211; Personalizando as páginas de erros</a></li><li><a href="http://cauancabral.net/2008/01/02/validacao-de-dados-em-php5-parte-1/" rel="bookmark" class="crp_title">Validação de dados em PHP5 &#8211; Parte 1</a></li><li><a href="http://cauancabral.net/2010/04/05/dica-rapida-cakephp-1-3-link-com-prefixo/" rel="bookmark" class="crp_title">Dica Rápida &#8211; CakePHP 1.3, link com prefixo</a></li><li><a href="http://cauancabral.net/2010/01/27/dica-rapida/" rel="bookmark" class="crp_title">Dica rápida</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://cauancabral.net/2009/02/25/cakephp-duvidas-comuns-2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>CakePHP &#8211; dúvidas comuns #1</title>
		<link>http://cauancabral.net/2009/02/23/cakephp-duvidas-comuns-1/</link>
		<comments>http://cauancabral.net/2009/02/23/cakephp-duvidas-comuns-1/#comments</comments>
		<pubDate>Mon, 23 Feb 2009 19:47:02 +0000</pubDate>
		<dc:creator>Cauan Cabral</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[Joomla!]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[dúvidas]]></category>
		<category><![CDATA[habtm]]></category>

		<guid isPermaLink="false">http://geek.cauancabral.net/?p=105</guid>
		<description><![CDATA[Como já comentei algumas vezes, estou desenvolvendo com um framework MVC em PHP chamado CakePHP. Ele foi construído com intuíto de provar o potencial do PHP (na época em comparação ao Ruby e o Ruby on Rails). Se precisar de &#8230; <a href="http://cauancabral.net/2009/02/23/cakephp-duvidas-comuns-1/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Como já comentei algumas vezes, estou desenvolvendo com um framework <a href="http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Model_E2_80_93view_E2_80_93controller?referer=');">MVC</a> em PHP chamado <a title="Página oficial do framework CakePHP" href="http://www.cakephp.org" onclick="pageTracker._trackPageview('/outgoing/www.cakephp.org?referer=');">CakePHP</a>. Ele foi construído com intuíto de provar o potencial do PHP (na época em comparação ao <a href="http://www.ruby-lang.org/pt/" onclick="pageTracker._trackPageview('/outgoing/www.ruby-lang.org/pt/?referer=');">Ruby</a> e o <a href="http://www.rubyonrails.pro.br/" onclick="pageTracker._trackPageview('/outgoing/www.rubyonrails.pro.br/?referer=');">Ruby on Rails</a>). Se precisar de mais informações sobre o framework sugiro leitura do seu <a title="Documentação oficial do CakePHP" href="http://book.cakephp.org" onclick="pageTracker._trackPageview('/outgoing/book.cakephp.org?referer=');">Cookbook</a> e de outros blogs a respeito.</p>
<p>Desde que descobri o CakePHP faço parte do grupo <a title="Grupo de discussão sobre CakePHP em português" href="http://groups.google.com/group/cakephp-pt/" onclick="pageTracker._trackPageview('/outgoing/groups.google.com/group/cakephp-pt/?referer=');">CakePHP Tuga</a> e ocasionalmente no canal de IRC do grupo #cakephp-pt na rede Freenode.org, e já tive a oportunidade de aprender e ajudar diversas vezes.</p>
<p>Vamos as dúvidas:</p>
<ol>
<li>Como salvar dados de um formulário que envolva um relacionamenteo de &#8220;muitos para muitos&#8221;/many-to- many ou ainda de HasAndBelongToMany (HABTM) ?</li>
</ol>
<p>Nesta dúvida temos que ter em mente que o CakePHP faz todas as ligações entre nossos modelos desde que sigamos suas convenções, caso façamos isso, não haverá dificuldades.<br />
Mas quais são essas convenções? <a title="Conveções do CakePHP" href="http://book.cakephp.org/pt/view/22/Conven%C3%A7%C3%B5es-no-CakePHP" onclick="pageTracker._trackPageview('/outgoing/book.cakephp.org/pt/view/22/Conven_C3_A7_C3_B5es-no-CakePHP?referer=');">Veja você mesmo</a>.</p>
<p>Um detalhe que não podemos esquecer é que por padrão o CakePHP está preparado para tratar suas convenções em inglês, então, se não quisermos ter de modificar as configurações padrões, temos de desenvolver em inglês. Ok?</p>
<p>Seguindo todas as conveções o que fica faltando? É preciso saber como um relacionamento HABTM se manifesta em um formulário, ou seja, como ele é apresentado. No CookBook temos um <a title="Salvando dados em um HABTM" href="http://book.cakephp.org/pt/view/85/Salvando-dados-em-tabelas-relacionadas-HABTM" onclick="pageTracker._trackPageview('/outgoing/book.cakephp.org/pt/view/85/Salvando-dados-em-tabelas-relacionadas-HABTM?referer=');">texto</a> sobre o caso. Resumindo, o que temos de ter é:</p>
<ul>
<li>Um formulário com o nome de um dos modelos envolvidos no relacionamento. Por exemplo, em um blog temos um modelo Post e outro Tags, os dois estão ligados por um HABTM, então no formulário para inserir um Post, o nome de formulário seria Post.</li>
<li>Um ou mais campos identificados com o outro modelo parte do relacionamento e sua chave. No nosso exemplo seriam um ou mais campos com o nome &#8216;Tag.Tag&#8217;.</li>
</ul>
<p>No item anterior que surge a principal dúvida: como definir o nome do meu campo? que tipo de campo usar?</p>
<p>Primeiro definimos o tipo de campo a se utilizar: normalmente utilizamos um Select box para multiplas seleções OU um conjunto de Checkbox. Qualquer que seja a escolha o restante é bem simples:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">/*
$tag é o retorno de um find('list') com os campos id e name selecionados
$tags = array( array('id' =&gt; 1, 'name' =&gt; 'tag 1'), array('id' =&gt; 2, 'name' =&gt; 'tag 2') );
&nbsp;
o índice 'multiple' só deve ser utilizado quando quiser um conjunto de checkbox
*/</span>
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$form</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">input</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Tag.Tag'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
	<span style="color: #0000ff;">'type'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'select'</span><span style="color: #339933;">,</span>
	<span style="color: #0000ff;">'multiple'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'checkbox'</span><span style="color: #339933;">,</span>
	<span style="color: #0000ff;">'options'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$tags</span><span style="color: #339933;">,</span>
	<span style="color: #0000ff;">'labels'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Selecione as tags'</span>
	<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Com isso seu formulário já retornará o que é esperado pelo CakePHP e tudo que será necessário para salvar os dados do relacionamento é utilizar o método &#8216;saveAll&#8217; ao invés de &#8216;save&#8217;.</p>
<p>Ainda esta semana comentarei das dúvidas sobre validação.</p>
<div id="crp_related"><h3>Outros posts que podem interessar:</h3><ul><li><a href="http://cauancabral.net/2009/02/25/cakephp-duvidas-comuns-2/" rel="bookmark" class="crp_title">CakePHP &#8211; Dúvidas Comuns #2</a></li><li><a href="http://cauancabral.net/2010/04/05/dica-rapida-cakephp-1-3-link-com-prefixo/" rel="bookmark" class="crp_title">Dica Rápida &#8211; CakePHP 1.3, link com prefixo</a></li><li><a href="http://cauancabral.net/2008/09/21/desenvolvimento-rapido/" rel="bookmark" class="crp_title">Desenvolvimento rápido</a></li><li><a href="http://cauancabral.net/2008/02/10/validao-de-dados-em-php5-final/" rel="bookmark" class="crp_title">Valida&#231;&#227;o de dados em PHP5 &#8211; final</a></li><li><a href="http://cauancabral.net/2010/01/27/dica-rapida/" rel="bookmark" class="crp_title">Dica rápida</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://cauancabral.net/2009/02/23/cakephp-duvidas-comuns-1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Desenvolvimento rápido</title>
		<link>http://cauancabral.net/2008/09/21/desenvolvimento-rapido/</link>
		<comments>http://cauancabral.net/2008/09/21/desenvolvimento-rapido/#comments</comments>
		<pubDate>Sun, 21 Sep 2008 22:41:27 +0000</pubDate>
		<dc:creator>Cauan Cabral</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[Desenvolvimento Web]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[ágil]]></category>
		<category><![CDATA[framework]]></category>

		<guid isPermaLink="false">http://geek.cauancabral.net/2008/09/21/desenvolvimento-rapido/</guid>
		<description><![CDATA[Últimamente está na moda a palavra &#8220;ágil&#8221;. Você têm de projetar rápido, desenvolver rápido, implementar rápido para ser considerado ágil. E apesar do PHP fornecer centenas de funções prontas para diversas tarefas rotineiras, ele perde feio comparado a outras linguagens &#8230; <a href="http://cauancabral.net/2008/09/21/desenvolvimento-rapido/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Últimamente está na moda a palavra &#8220;ágil&#8221;.<br />
Você têm de projetar rápido, desenvolver rápido, implementar rápido para ser considerado ágil.</p>
<p>E apesar do <a href="http://br.php.net" onclick="pageTracker._trackPageview('/outgoing/br.php.net?referer=');">PHP</a> fornecer centenas de funções prontas para diversas tarefas rotineiras, ele perde feio comparado a outras linguagens mais novas como Ruby ou Python, principalmente quando juntamos a estas seus grandes frameworks &#8211; Rails no caso do Ruby e Django no caso do Python.</p>
<p>Mas a comunidade PHP tem suas cartas na manga, vários frameworks agilizam o desenvolvimento tanto em aplicações simples como em aplicações sofisticadas.<br />
E são várias as opções. Tem para todos os gostos, nos próximo posts vou falar um pouco deles.</p>
<p>Hoje começo com o <a href="http://www.cakephp.org" onclick="pageTracker._trackPageview('/outgoing/www.cakephp.org?referer=');">CakePHP</a>:</p>
<p><span style="font-weight: bold;">Descrição:</span><br />
Compete de frente com o Rails. Possui uma base bem estruturada, código bem organizado, comunidade participativa e uma licensa flexivel. Seu grande destaque está no baker, que gera ações básicas (criar,ler,atualizar e apagar entradas) para uma tabela do banco de dados.</p>
<p><span style="font-weight: bold;">Como usa-lo?</span><br />
É muito fácil, basta ir a página <a href="http://cakephp.org/" onclick="pageTracker._trackPageview('/outgoing/cakephp.org/?referer=');">dele</a> e fazer o download do último lançamento. Recomendo a versão 1.2.xx , apesar de ser RC2 (candidata a estável) ela já está bem estável e possui vários melhoramentos em relação a versão 1.1.xx.<br />
Em seguida descompacte o arquivo onde achar melhor (dentro de seu servidor web) e pronto. Agora só falta você configurar o arquivo &#8220;/app/config/database.php&#8221;. Nele você encontra instruções de como inserir as informações para acessar o seu banco de dados, há até um exemplo de como fazer.<br />
Agora é só acessar, através do navegador, a pasta que você descompactou o CakePHP.</p>
<p><span style="font-weight: bold;">Onde encontrar material para estudo?</span><br />
Como comentei antes, o CakePHP possui uma comunidade bem participativa, mas a maioria não fala português, então você encontrará bastante informação em inglês, aqui listo alguns sites e blogs com informações sobre o tema, bons estudos:</p>
<ul>
<li><a href="http://cakephp.org/" onclick="pageTracker._trackPageview('/outgoing/cakephp.org/?referer=');">CakePHP</a> &#8211; A página oficial, sempre com novidades (inglês)</li>
<li><a href="http://book.cakephp.org/" onclick="pageTracker._trackPageview('/outgoing/book.cakephp.org/?referer=');">The Cookbook</a> &#8211; O manual oficial do cake. Possui conteúdo para versão 1.1 e 1.2, sendo que a segunda esta sendo finalizada. Obrigatório. (em inglês com parte do conteúdo em português, só alterar no rodapé da página).</li>
<li><a href="http://api.cakephp.org/" onclick="pageTracker._trackPageview('/outgoing/api.cakephp.org/?referer=');">API for CakePHP</a> &#8211; A documentação das classes, métodos e funcionalidades do CakePHP. Não é muito rica em detalhes, mas está melhorando. Obrigatório. (inglês)</li>
<li><a href="http://lemoncake.wordpress.com/" onclick="pageTracker._trackPageview('/outgoing/lemoncake.wordpress.com/?referer=');">lemoncake</a> &#8211; Um blog com várias discussões sobre CakePHP e dicas/tutoriais de como usar recursos do Cake. Muito recomendado. (inglês).</li>
<li><a href="http://aranworld.com/article/161/cakephp-acl-tutorial-what-is-it" onclick="pageTracker._trackPageview('/outgoing/aranworld.com/article/161/cakephp-acl-tutorial-what-is-it?referer=');">aranworld</a> &#8211; Um blog que tem posts esporádicos a respeito do CakePHP, mas no link que vinculei, há uma série de posts sobre o sistema de controle de acesso do CakePHP, uma ferramente extremamente poderosa mas que pode parecer complicada de utilizar no inicio. Muito recomendado. (inglês)</li>
<li><a href="http://cakephp.com.br" onclick="pageTracker._trackPageview('/outgoing/cakephp.com.br?referer=');">CakePHP &#8211; Brasil</a> &#8211; Portal brasileiro sobre CakePHP, ótimo para quem não arrisca muito o inglês, possui dicas e até uma versão traduzida do manual. Muito recomendado. (português)</li>
</ul>
<p>E podem esperar que em breve haverá vários posts a respeito. Estou utilizando bastante o CakePHP e tenho gostado muito. Colocarei algumas dicas aqui logo logo.</p>
<div id="crp_related"><h3>Outros posts que podem interessar:</h3><ul><li><a href="http://cauancabral.net/2010/01/26/cakephp-1-3-quase-assad/" rel="bookmark" class="crp_title">CakePHP 1.3 quase assado</a></li><li><a href="http://cauancabral.net/2009/02/23/cakephp-duvidas-comuns-1/" rel="bookmark" class="crp_title">CakePHP &#8211; dúvidas comuns #1</a></li><li><a href="http://cauancabral.net/2008/01/03/validacao-de-dados-em-php5-parte-2/" rel="bookmark" class="crp_title">Validação de dados em PHP5 &#8211; Parte 2</a></li><li><a href="http://cauancabral.net/2010/04/11/obrigado-pelos-peixes-svn/" rel="bookmark" class="crp_title">Obrigado pelos peixes SVN</a></li><li><a href="http://cauancabral.net/2008/01/17/sentiram-falta/" rel="bookmark" class="crp_title">Sentiram falta?</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://cauancabral.net/2008/09/21/desenvolvimento-rapido/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
