<?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>Meio Código &#187; CakePHP</title>
	<atom:link href="http://www.meiocodigo.com/category/cakephp/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.meiocodigo.com</link>
	<description>A peça que faltava para seu código.</description>
	<lastBuildDate>Sat, 14 Jan 2012 18:44:01 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>MeioUpload project created at github</title>
		<link>http://www.meiocodigo.com/2009/06/08/meioupload-project-created-at-github/</link>
		<comments>http://www.meiocodigo.com/2009/06/08/meioupload-project-created-at-github/#comments</comments>
		<pubDate>Mon, 08 Jun 2009 13:02:37 +0000</pubDate>
		<dc:creator>vbmendes</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[Behavior]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[meioupload]]></category>
		<category><![CDATA[upload]]></category>

		<guid isPermaLink="false">http://www.meiocodigo.com/?p=380</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.meiocodigo.com/2009/06/08/meioupload-project-created-at-github/' addthis:title='MeioUpload project created at github '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>Juan Basso created a project hosted at github. I am unable to keep working on this behavior an he is making some updates to the code. I think github is a great tool because you can simply fork the project and make your own changes. Go check his work: http://github.com/jrbasso/MeioUpload/tree/master<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.meiocodigo.com/2009/06/08/meioupload-project-created-at-github/' addthis:title='MeioUpload project created at github ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.meiocodigo.com/2009/06/08/meioupload-project-created-at-github/' addthis:title='MeioUpload project created at github '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div><p>Juan Basso created a project hosted at github. I am unable to keep working on this behavior an he is making some updates to the code. I think github is a great tool because you can simply fork the project and make your own changes. Go check his work: <a href="http://github.com/jrbasso/MeioUpload/tree/master">http://github.com/jrbasso/MeioUpload/tree/master</a></p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.meiocodigo.com/2009/06/08/meioupload-project-created-at-github/' addthis:title='MeioUpload project created at github ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></content:encoded>
			<wfw:commentRss>http://www.meiocodigo.com/2009/06/08/meioupload-project-created-at-github/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>MeioUpload Behavior documentation in other languages</title>
		<link>http://www.meiocodigo.com/2009/01/28/meioupload-behavior-documentation-in-other-languages/</link>
		<comments>http://www.meiocodigo.com/2009/01/28/meioupload-behavior-documentation-in-other-languages/#comments</comments>
		<pubDate>Wed, 28 Jan 2009 23:12:29 +0000</pubDate>
		<dc:creator>vbmendes</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[Behavior]]></category>
		<category><![CDATA[docs]]></category>
		<category><![CDATA[documentation]]></category>
		<category><![CDATA[meioupload]]></category>
		<category><![CDATA[meioupload behavior]]></category>

		<guid isPermaLink="false">http://www.meiocodigo.com/?p=279</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.meiocodigo.com/2009/01/28/meioupload-behavior-documentation-in-other-languages/' addthis:title='MeioUpload Behavior documentation in other languages '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>I found out that the documentation of the MeioUpload was translated to other languages and I want to announce it. Here are the links: Documentation translated to French Documentation translated to Ukrainian<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.meiocodigo.com/2009/01/28/meioupload-behavior-documentation-in-other-languages/' addthis:title='MeioUpload Behavior documentation in other languages ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.meiocodigo.com/2009/01/28/meioupload-behavior-documentation-in-other-languages/' addthis:title='MeioUpload Behavior documentation in other languages '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div><p>I found out that the documentation of the MeioUpload was translated to other languages and I want to announce it. Here are the links:</p>

<ul>
<li>
<a href="http://forum.cakephp-fr.org/viewtopic.php?id=130">Documentation translated to French</a>
</li>
<li>
<a href="http://blog.meelk.com.ua/2009/01/28/povedinki-cakephp-ta-zavantazhennya-fajliv-na-server/#IDComment14420777">Documentation translated to Ukrainian</a>
</li>
</ul>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.meiocodigo.com/2009/01/28/meioupload-behavior-documentation-in-other-languages/' addthis:title='MeioUpload Behavior documentation in other languages ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></content:encoded>
			<wfw:commentRss>http://www.meiocodigo.com/2009/01/28/meioupload-behavior-documentation-in-other-languages/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Unique validation rule in CakePHP 1.2</title>
		<link>http://www.meiocodigo.com/2008/10/18/unique-validation-rule-in-cakephp-12/</link>
		<comments>http://www.meiocodigo.com/2008/10/18/unique-validation-rule-in-cakephp-12/#comments</comments>
		<pubDate>Sat, 18 Oct 2008 11:46:49 +0000</pubDate>
		<dc:creator>vbmendes</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[unique]]></category>
		<category><![CDATA[validation]]></category>

		<guid isPermaLink="false">http://www.meiocodigo.com/?p=192</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.meiocodigo.com/2008/10/18/unique-validation-rule-in-cakephp-12/' addthis:title='Unique validation rule in CakePHP 1.2 '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>In this post I will show an example of how apply the unique validation rule in CakePHP 1.2. It&#8217;s very important to do in some cases, like saving users. You must make sure that the username is unique in your system. Lets see how it works: var $validate = array( &#039;username&#039; =&#62; array( &#039;rule&#039; =&#62; [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.meiocodigo.com/2008/10/18/unique-validation-rule-in-cakephp-12/' addthis:title='Unique validation rule in CakePHP 1.2 ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.meiocodigo.com/2008/10/18/unique-validation-rule-in-cakephp-12/' addthis:title='Unique validation rule in CakePHP 1.2 '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div><p>In this post I will show an example of how apply the unique validation rule in CakePHP 1.2. It&#8217;s very important to do in some cases, like saving users. You must make sure that the username is unique in your system. Lets see how it works:</p>

<p><pre class="brush: php">
var $validate = array(
    &#039;username&#039; =&gt; array(
        &#039;rule&#039; =&gt; array(&#039;isUnique&#039;),
        &#039;message&#039; =&gt; &#039;Username already in use.&#039;
    )
);
</pre></p>

<p>I wrote a custom function to validate it, but thanks to <a href="http://www.amillet.net">Dia</a> now I know the built-in validation rule.</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.meiocodigo.com/2008/10/18/unique-validation-rule-in-cakephp-12/' addthis:title='Unique validation rule in CakePHP 1.2 ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></content:encoded>
			<wfw:commentRss>http://www.meiocodigo.com/2008/10/18/unique-validation-rule-in-cakephp-12/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>MeioUpload Behavior 1.0.1 released!</title>
		<link>http://www.meiocodigo.com/2008/10/12/meioupload-behavior-10-released/</link>
		<comments>http://www.meiocodigo.com/2008/10/12/meioupload-behavior-10-released/#comments</comments>
		<pubDate>Sun, 12 Oct 2008 22:40:46 +0000</pubDate>
		<dc:creator>vbmendes</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Behavior]]></category>
		<category><![CDATA[upload]]></category>

		<guid isPermaLink="false">http://www.meiocodigo.com/?p=135</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.meiocodigo.com/2008/10/12/meioupload-behavior-10-released/' addthis:title='MeioUpload Behavior 1.0.1 released! '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>I am glad to show you the MeioUpload Behavior 1.0.1. An improved Upload Behavior for CakePHP 1.2. It makes file uploads as simple as defining a variable. See the docs. Features Accepts custom directory for files to be uploaded; Validates the file extension and mime-type due to the behavior configuration; Validates the max file size; [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.meiocodigo.com/2008/10/12/meioupload-behavior-10-released/' addthis:title='MeioUpload Behavior 1.0.1 released! ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.meiocodigo.com/2008/10/12/meioupload-behavior-10-released/' addthis:title='MeioUpload Behavior 1.0.1 released! '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div><p>I am glad to show you the <a href="http://www.meiocodigo.com/projects/meioupload">MeioUpload Behavior 1.0.1</a>. An improved Upload Behavior for CakePHP 1.2. It makes file uploads as simple as defining a variable.</p>

<p><a href="http://www.meiocodigo.com/projects/meioupload">See the docs.</a></p>

<h3>Features</h3>

<ul>
    <li>Accepts custom directory for files to be uploaded;</li>
    <li>Validates the file extension and mime-type due to the behavior configuration;</li>
    <li>Validates the max file size;</li>
    <li>Allow custom validation rules;</li>
    <li>Allow as many thumbnails formats as you want;</li>
    <li>Allow more then one field to be uploadable, with custom options per field;</li>
    <li>Stores the directory, filesize, and mime-type in the database if the table has these fields;</li>
    <li>Allow the use of default files and deleting files without deleting the entire record;</li>
    <li>Delete files when the record is deleted or updated with a new file;</li>
    <li>Also works in the $model->saveAll method.</li>
</ul>

<h3>Changelog</h3>

<h4>v1.0.1</h4>

<ul>
    <li>Fixed a bug in the create folder method;</li>
    <li>Now you can use the $validate var of the model to apply the changes to default validation rules;</li>
    <li>Changed the my_array_merge function, now it&#8217;s part of the behavior, name arrayMerge;</li>
    <li>Allow use of {DS}, {model} and {field} constants in directory name and fields names;</li>
    <li>Fixed a bug with the replacement of the default names.</li>
</ul>

<h4>v1.0</h4>

<ul>
    <li>Initial release</li>
</ul>

<p>Any bugs, features suggestions, and english errors, please tell me.</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.meiocodigo.com/2008/10/12/meioupload-behavior-10-released/' addthis:title='MeioUpload Behavior 1.0.1 released! ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></content:encoded>
			<wfw:commentRss>http://www.meiocodigo.com/2008/10/12/meioupload-behavior-10-released/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Setar flag no lugar de excluir registro do banco com CakePHP</title>
		<link>http://www.meiocodigo.com/2008/09/30/setar-flag-no-lugar-de-excluir-registro-do-banco-com-cakephp/</link>
		<comments>http://www.meiocodigo.com/2008/09/30/setar-flag-no-lugar-de-excluir-registro-do-banco-com-cakephp/#comments</comments>
		<pubDate>Tue, 30 Sep 2008 22:59:52 +0000</pubDate>
		<dc:creator>vbmendes</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Behavior]]></category>

		<guid isPermaLink="false">http://www.meiocodigo.com/?p=101</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.meiocodigo.com/2008/09/30/setar-flag-no-lugar-de-excluir-registro-do-banco-com-cakephp/' addthis:title='Setar flag no lugar de excluir registro do banco com CakePHP '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>Uma boa prática de programação é setar uma flag indicando que um registro foi excluido, e não simplesmente excluir o registro do banco. Por exemplo, se eu tenho um produto, que está relacionado em vários pedidos, e eu simplesmente excluo o produto, todos os pedidos que referenciam ele serão inconsistentes. Se em troca de excluir [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.meiocodigo.com/2008/09/30/setar-flag-no-lugar-de-excluir-registro-do-banco-com-cakephp/' addthis:title='Setar flag no lugar de excluir registro do banco com CakePHP ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.meiocodigo.com/2008/09/30/setar-flag-no-lugar-de-excluir-registro-do-banco-com-cakephp/' addthis:title='Setar flag no lugar de excluir registro do banco com CakePHP '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div><p>Uma boa prática de programação é setar uma flag indicando que um registro foi excluido, e não simplesmente excluir o registro do banco. Por exemplo, se eu tenho um produto, que está relacionado em vários pedidos, e eu simplesmente excluo o produto, todos os pedidos que referenciam ele serão inconsistentes. Se em troca de excluir o registro do produto, eu simplesmente setar uma flag no registro indicando que ele foi excluído, eu não perderei mais essa consistência. Para excluir o produto de id 5, seria algo como:</p>

<p><pre class="syntax-highlight:php">mysql_query("UPDATE produtos SET deleted = true WHERE id = 5");</pre></p>

<p>E para listar os produtos, poderia ser algo como:</p>

<p><pre class="syntax-highlight:php">mysql_query("SELECT * FROM produtos WHERE NOT deleted;");</pre></p>

<p>Percebam que para transferir isso para o CakePHP, basta alterar dois métodos, o index, adicionando a condição, e o delete, substituindo o $this->Produto->del() por um save. Mas o <a href="http://www.marianoiglesias.com.ar/">Mariano Iglesias</a> do <a href="http://cake-syrup.sourceforge.net/">Cake Syrup</a> desenvolveu um behavior que nos economiza muito trabalho. É o <a href="http://cake-syrup.sourceforge.net/ingredients/soft-deletable-behavior/">SoftDeletable</a>. Com ele, a tarefa se resume a uma simples configuração no model no qual se deseja aplicar o uso da flag.</p>

<p><pre class="syntax-highlight:php">var $actsAs = array('SoftDeletable');</pre></p>

<p>Para isso, basta criar o campo deleted na sua tabela e adicionar o arquivo do behavior, disponível no site citado, na pasta de behaviors do seu projeto.</p>

<p>O único problema que eu encontrei nesse behavior é que ao chamar a função $this->Model->del($id), o beforeDelete do behavior é acionado, atualizando o campo da flag deleted para true e retornando false, o que impede que o registro seja realmente excluído do banco. Com isso a tentativa de salvar retorna falso, indicando erroneamente que não obteve sucesso.</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.meiocodigo.com/2008/09/30/setar-flag-no-lugar-de-excluir-registro-do-banco-com-cakephp/' addthis:title='Setar flag no lugar de excluir registro do banco com CakePHP ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></content:encoded>
			<wfw:commentRss>http://www.meiocodigo.com/2008/09/30/setar-flag-no-lugar-de-excluir-registro-do-banco-com-cakephp/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Validar relacionamento belongsTo no CakePHP</title>
		<link>http://www.meiocodigo.com/2008/09/28/validar-relacionamento-belongsto-no-cakephp/</link>
		<comments>http://www.meiocodigo.com/2008/09/28/validar-relacionamento-belongsto-no-cakephp/#comments</comments>
		<pubDate>Sun, 28 Sep 2008 14:39:42 +0000</pubDate>
		<dc:creator>vbmendes</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Validação]]></category>

		<guid isPermaLink="false">http://www.meiocodigo.com/?p=59</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.meiocodigo.com/2008/09/28/validar-relacionamento-belongsto-no-cakephp/' addthis:title='Validar relacionamento belongsTo no CakePHP '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>Uma prática que eu acho bastante interessante é verificar se realmente um registro existe no banco antes de associá-lo a outro. Por exemplo, suponha que se têm dois models: /app/models/pessoa.php class Pessoa extends AppModel { var $name = "Pessoa"; } /app/models/aluno.php class Aluno extends AppModel { var $name = "Aluno"; var $belongsTo = array( 'Pessoa' [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.meiocodigo.com/2008/09/28/validar-relacionamento-belongsto-no-cakephp/' addthis:title='Validar relacionamento belongsTo no CakePHP ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.meiocodigo.com/2008/09/28/validar-relacionamento-belongsto-no-cakephp/' addthis:title='Validar relacionamento belongsTo no CakePHP '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div><p>Uma prática que eu acho bastante interessante é verificar se realmente um registro existe no banco antes de associá-lo a outro. Por exemplo, suponha que se têm dois models:
<pre class="syntax-highlight:php">
/app/models/pessoa.php
class Pessoa extends AppModel {
    var $name = "Pessoa";
}</p>

<p>/app/models/aluno.php
class Aluno extends AppModel {
    var $name = "Aluno";
    var $belongsTo = array(
        'Pessoa' => array(
            'className' => 'Pessoa',
            'foreignKey' => 'pessoa_id'
        )
    );
}
</pre>
Eu quero que sempre que eu adicionar um aluno, o sistema valide se a pessoa a qual eu estou associando este aluno esteja cadastrada no banco. Ou seja, quero garantir que o aluno estará vinculado a uma pessoa válida.</p>

<p>Para isso eu criei uma função de validação que coloquei no meu app_model.php. Veja:
<pre class="syntax-highlight:php">
function checkBelongsTo($data, $relationName){
    $field = $this->belongsTo[$relationName]['foreignKey'];
    $search[$this->{$relationName}->primaryKey] = $data[$field];
    return $this->{$relationName}->find('count',array('conditions' => $search));
}
</pre>
Vamos analisar o código. A primeira linha da função determina qual o campo que irá conter a <em>foreign key</em>, no nosso caso pessoa_id. A segunda linha gera um array de condições no formato:
<pre class="syntax-highlight:php">
Array[primaryKey => valor]
</pre>
Onde <em>primaryKey</em> é obtido diretamente do model associado, e <em>valor</em> é o id do registro ao qual se quer fazer a relação. Na terceira linha é feita uma busca ao banco para saber quantos registros existem que satisfaçam essa condição, o que, obedecendo a condição de que a chave primária deve ser única, irá retornar 0 ou 1. O resultado desta consulta será o retorno da função.
Feito isso, basta adicionar a condição de validação ao model:
<pre class="syntax-highlight:php">
/app/models/aluno.php
class Aluno extends AppModel {
    var $name = "Aluno";
    var $validate = array(
        'pessoa_id' => array(
            'rule' => array('checkBelongsTo','Pessoa'),
            'message' => 'Pessoa inexistente.'
        );
    );
    var $belongsTo = array(
        'Pessoa' => array(
            'className' => 'Pessoa',
            'foreignKey' => 'pessoa_id'
        )
    );
}
</pre>
Perceba que eu adicionei a regra de validação checkBelongsTo passando como parametro o nome do relacionamento entre aluno e pessoa.</p>

<p>Espero ter sido claro. Qualquer dúvida comente.</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.meiocodigo.com/2008/09/28/validar-relacionamento-belongsto-no-cakephp/' addthis:title='Validar relacionamento belongsTo no CakePHP ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></content:encoded>
			<wfw:commentRss>http://www.meiocodigo.com/2008/09/28/validar-relacionamento-belongsto-no-cakephp/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Prepared Statements e CakePHP</title>
		<link>http://www.meiocodigo.com/2008/09/26/pepared-statements-e-cakephp/</link>
		<comments>http://www.meiocodigo.com/2008/09/26/pepared-statements-e-cakephp/#comments</comments>
		<pubDate>Fri, 26 Sep 2008 13:17:56 +0000</pubDate>
		<dc:creator>vbmendes</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[prepared statements]]></category>
		<category><![CDATA[Segurança]]></category>
		<category><![CDATA[sql injection]]></category>

		<guid isPermaLink="false">http://www.meiocodigo.com/?p=37</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.meiocodigo.com/2008/09/26/pepared-statements-e-cakephp/' addthis:title='Prepared Statements e CakePHP '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>Precisei montar uma SQL &#8220;na mão&#8221; usando o CakePHP pois ela era muito complexa. Mas me bateu a preocupação com o famoso SQL injection. Então me lembrei das minhas aulas de Programação Orientada a Objetos em que o professor falou que em java existia um método de uso de SQL chamado de prepared statement. O [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.meiocodigo.com/2008/09/26/pepared-statements-e-cakephp/' addthis:title='Prepared Statements e CakePHP ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.meiocodigo.com/2008/09/26/pepared-statements-e-cakephp/' addthis:title='Prepared Statements e CakePHP '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div><p>Precisei montar uma SQL &#8220;na mão&#8221; usando o CakePHP pois ela era muito complexa. Mas me bateu a preocupação com o famoso SQL injection. Então me lembrei das minhas aulas de Programação Orientada a Objetos em que o professor falou que em java existia um método de uso de SQL chamado de prepared statement. O qual você monta a SQL colocando &#8216;?&#8217; onde serão colocados parâmetros que serão passado para a SQL. Mas ele me mostrou como fazer isso em Java, então fui em busca de uma solução parecida em CakePHP e encontrei. Vou postar um exemplo simples que logicamente poderia ser feito usando a abstração de banco do cake:
<pre class="brush: php">$query = &quot;SELECT nome FROM pessoa WHERE id = ? AND cpf = ?&quot;;
$values = array($this-&gt;params[&#039;named&#039;][&#039;pessoa_id&#039;],$this-&gt;params[&#039;named&#039;][&#039;cpf&#039;]);
$this-&gt;Pessoa-&gt;query($query,$values);</pre>
Veja que eu passei dois parâmetros para o método query do model: o meu SQL com duas &#8216;?&#8217; e um array com dois objetos que irão substituir as duas &#8216;?&#8217; do SQL. Veja que a ordem de substituição é a natural, ou seja, o primeiro item do array substitui a primeira &#8216;?&#8217; do SQL e assim sucessivamente.</p>

<p>É recomendado o uso dos prepared statements sempre que tiver que criar consultas com SQL e que precisem de parâmetros.</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.meiocodigo.com/2008/09/26/pepared-statements-e-cakephp/' addthis:title='Prepared Statements e CakePHP ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></content:encoded>
			<wfw:commentRss>http://www.meiocodigo.com/2008/09/26/pepared-statements-e-cakephp/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Trabalhando com JSON no CakePHP 1.2</title>
		<link>http://www.meiocodigo.com/2008/09/12/trabalhando-com-json-no-cakephp-12/</link>
		<comments>http://www.meiocodigo.com/2008/09/12/trabalhando-com-json-no-cakephp-12/#comments</comments>
		<pubDate>Fri, 12 Sep 2008 10:43:10 +0000</pubDate>
		<dc:creator>vbmendes</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[js]]></category>

		<guid isPermaLink="false">http://www.meiocodigo.com/2008/09/12/trabalhando-com-json-no-cakephp-12/</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.meiocodigo.com/2008/09/12/trabalhando-com-json-no-cakephp-12/' addthis:title='Trabalhando com JSON no CakePHP 1.2 '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div> Gostei da forma como o Juan Basso trabalha para renderizar objetos JSON através do CakePHP. Ficou bem limpa e da conta do recado. Segue o link do post falando sobre isso: http://blog.cakephp-brasil.org/2008/09/11/trabalhando-com-json-no-cakephp-12/<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.meiocodigo.com/2008/09/12/trabalhando-com-json-no-cakephp-12/' addthis:title='Trabalhando com JSON no CakePHP 1.2 ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.meiocodigo.com/2008/09/12/trabalhando-com-json-no-cakephp-12/' addthis:title='Trabalhando com JSON no CakePHP 1.2 '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div><p> Gostei da forma como o Juan Basso trabalha para renderizar objetos JSON através do CakePHP. Ficou bem limpa e da conta do recado. Segue o link do post falando sobre isso: <a href="http://blog.cakephp-brasil.org/2008/09/11/trabalhando-com-json-no-cakephp-12/" title="Post sobre como trabalhar com JSON em CakePHP 1.2">http://blog.cakephp-brasil.org/2008/09/11/trabalhando-com-json-no-cakephp-12/</a></p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.meiocodigo.com/2008/09/12/trabalhando-com-json-no-cakephp-12/' addthis:title='Trabalhando com JSON no CakePHP 1.2 ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></content:encoded>
			<wfw:commentRss>http://www.meiocodigo.com/2008/09/12/trabalhando-com-json-no-cakephp-12/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CakePHP &#8211; Herança de Helper</title>
		<link>http://www.meiocodigo.com/2008/06/02/cakephp-heranca-de-helper/</link>
		<comments>http://www.meiocodigo.com/2008/06/02/cakephp-heranca-de-helper/#comments</comments>
		<pubDate>Mon, 02 Jun 2008 17:03:04 +0000</pubDate>
		<dc:creator>vbmendes</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Helper]]></category>
		<category><![CDATA[Herança]]></category>

		<guid isPermaLink="false">http://www.meiocodigo.com/2008/06/02/cakephp-heranca-de-helper/</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.meiocodigo.com/2008/06/02/cakephp-heranca-de-helper/' addthis:title='CakePHP &#8211; Herança de Helper '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>Ultimamente tenho utilizado o Framework CakePHP, e uma dúvida que me surgiu esses dias foi como um Helper herdar de outro helper. Por exemplo, criei um helper MyTimeHelper que herda do TimeHelper, e adicionei um método que sobrescreve o format. Entretanto, me ocorria um problema que o script não conseguia encontrar o TimeHelper, por ele [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.meiocodigo.com/2008/06/02/cakephp-heranca-de-helper/' addthis:title='CakePHP &#8211; Herança de Helper ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.meiocodigo.com/2008/06/02/cakephp-heranca-de-helper/' addthis:title='CakePHP &#8211; Herança de Helper '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div><p>Ultimamente tenho utilizado o Framework <a href="http://www.cakephp.com">CakePHP</a>, e uma dúvida que me surgiu esses dias foi como um Helper herdar de outro helper. Por exemplo, criei um helper MyTimeHelper que herda do TimeHelper, e adicionei um método que sobrescreve o format. Entretanto, me ocorria um problema que o script não conseguia encontrar o TimeHelper, por ele não ter sido invocado pelo core do cake. Então eu adicionei a linha App::import(&#8216;Helper&#8217;,'Time&#8217;); no início da definição do MyTimeHelper e o problema foi resolvido. Então o codigo fica assim:</p>

<p><pre class="syntax-highlight:php">
App::import('Helper', 'Time');</p>

<p>class MyTimeHelper extends TimeHelper {
...
}
</pre></p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://www.meiocodigo.com/2008/06/02/cakephp-heranca-de-helper/' addthis:title='CakePHP &#8211; Herança de Helper ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></content:encoded>
			<wfw:commentRss>http://www.meiocodigo.com/2008/06/02/cakephp-heranca-de-helper/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

