<?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>gomflo &#187; CakePHP</title>
	<atom:link href="http://gomflo.com/category/cakephp/feed/" rel="self" type="application/rss+xml" />
	<link>http://gomflo.com</link>
	<description></description>
	<lastBuildDate>Mon, 12 Sep 2011 17:35:10 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Principios Basicos de CakePHP</title>
		<link>http://gomflo.com/2010/03/26/principios-basicos-de-cakephp/</link>
		<comments>http://gomflo.com/2010/03/26/principios-basicos-de-cakephp/#comments</comments>
		<pubDate>Fri, 26 Mar 2010 19:56:12 +0000</pubDate>
		<dc:creator>Hugo Gómez</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[MVC]]></category>

		<guid isPermaLink="false">http://gomflo.com/?p=307</guid>
		<description><![CDATA[CakePHP es un framework (paquete de librerias, clases) que proveé una arquitectura extensible para desarrollar, mantener y publicar aplicaciones. Usando los patrones comunmente conocidos como MVC y ORM, dentro del paradigma convención en vez de configuración. CakePHP reduce el costo del desarrollo y ayuda a los desarrolladores a escribir menos código.

Desarrallodares que conocen Ruby on [...]]]></description>
			<content:encoded><![CDATA[<p>CakePHP es un framework (paquete de librerias, clases) que proveé una arquitectura extensible para desarrollar, mantener y publicar aplicaciones. Usando los patrones comunmente conocidos como <acronym title="Model, View, Controller">MVC</acronym> y <acronym title="Object Relation Mapping">ORM</acronym>, dentro del paradigma convención en vez de configuración. CakePHP reduce el costo del desarrollo y ayuda a los desarrolladores a escribir menos código.</p>
<p><span id="more-307"></span></p>
<p>Desarrallodares que conocen Ruby on Rails pueden encontrar que cakePHP es muy similar, por una cosa, cake esta basado en la estructura MVC que es potente y facil de comprender: controladores, modelos y vistas garantizan una estricta, pero natural separacion de la lógica del negocio, de los datos y las capas de presentación.</p>
<p><strong>Controladores</strong>: contienen la lógica de tu aplicación: Cada controlador puede ofrecer diferente funcionalidad; los controladores obtienen y modifican los datos accediendo a las tablas de la base de datos a traves de los modelos; tambien registran variables y objetos, que pueden ser usados en la vistas.</p>
<p><strong>Modelos</strong>: son la representación de las tablas en la base de datos: pueden conectar a la base de datos, hacer consultas y guardar datos. Es importante que para aplicar correctamente la arquitectura MVC, no debe existir ninguna correlación entre el modelo y la vista: toda la lógica es manipulada por los controladores.</p>
<p><strong>Vistas</strong>: pueden ser descritas como las plantillas que muestran el contenido al usuario: variables, arreglos y objetos que son usados en las vistas son registrados a traves del controlador. Las vistas no pueden contener lógica del negocio compleja, solo las estructuras de control necesrias para realizar ciertas operaciones, como la iteración de los datos recolectados a traves del controlador pueden ser manipulados por la vista.</p>
<p>Esta arquitectura puede mejorar en gran medida, el mantenimiento y la organización del código en tu sitio:</p>
<ul>
<li>Separa la lógica del negocio de la presentación y la obtención de datos.</li>
<li>El sitio es dividido en secciones logicas, cada una gobernada por un controlador en particular</li>
<li>Cuando hacemos pruebas o  depuramos una aplicación, cualquier desarrollador acostumbrado a la estructura de cakePHP, sera capaz de localizar y corregir errores sin conocer todos los detalles del código.</li>
</ul>
<p>Controladores, modelos y vistas son almacenados en directorios pre-definidos dentro de la estructura de cakePHP. Aquí esta la estructura usada en la ultima versión estable hasta el momento <strong>1.2.6</strong>:</p>
<p>| app/<br />
|&#8212;- config/<br />
|&#8212;- controllers/<br />
|&#8212;- locale/<br />
|&#8212;- models/<br />
|&#8212;- plugins/<br />
|&#8212;- tests/<br />
|&#8212;- tmp/<br />
|&#8212;- vendors/<br />
|&#8212;- views/<br />
|&#8212;- webroot/<br />
| cake/<br />
|&#8212;- config/<br />
|&#8212;- console/<br />
|&#8212;- libs/<br />
|&#8212;- tests/<br />
| vendors/</p>
<p>Este esquema de directorios debe ser conservada, ya que es escencial para que el framework funcione. Cake, como Rails, considera la importancia de convención en vez de configuración, es decir que no es necesario modificar decenas de archivos relacionados a la configuración de la aplicación. Es importante colocar todo en el lugar adecuado, despues, puedes dejar a cakePHP que haga el resto.</p>
<p>Aunque esto puede preocuparle a ciertos desarrolladores, es una manera comprobada que realmente puede acelerar el proceso de desarrollo.</p>
]]></content:encoded>
			<wfw:commentRss>http://gomflo.com/2010/03/26/principios-basicos-de-cakephp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Select Box en CakePHP</title>
		<link>http://gomflo.com/2010/03/25/select-box-en-cakephp/</link>
		<comments>http://gomflo.com/2010/03/25/select-box-en-cakephp/#comments</comments>
		<pubDate>Thu, 25 Mar 2010 18:00:11 +0000</pubDate>
		<dc:creator>Hugo Gómez</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[Select]]></category>

		<guid isPermaLink="false">http://gomflo.com/?p=218</guid>
		<description><![CDATA[Una de las preguntas más comunes que se ven por los grupos de google de cakePHP, es como crear un select box relacionado a un modelo. Sigo viendo que aún mucha gente no entiende el verdadero poder del lema:

&#8220;Convención en vez configuración&#8221;

En este articulo veras como cakePHP utiliza ese lema en la creacion de select [...]]]></description>
			<content:encoded><![CDATA[<p>Una de las preguntas más comunes que se ven por los grupos de google de cakePHP, es como crear un select box relacionado a un modelo. Sigo viendo que aún mucha gente no entiende el verdadero poder del lema:</p>
<blockquote><p>
&#8220;Convención en vez configuración&#8221;
</p></blockquote>
<p>En este articulo veras como cakePHP utiliza ese lema en la creacion de select boxes.</p>
<p><span id="more-218"></span></p>
<p>Digamos que tenemos dos modelos, ambos relacionados entre si:</p>
<p>El modelo usuario:</p>

<div class="wp_syntax"><div class="code"><pre class="php"><span style="color: #000000; font-weight: bold;">class</span> Usuario <span style="color: #000000; font-weight: bold;">extends</span> AppModel <span style="color: #009900;">&#123;</span>
  <span style="color: #000088;">$hasOne</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Perfil'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Lo que estamos indicando en la relación de este modelo quiere decir que un usuario tiene o pertenece a un solo perfil, cabe destacar que en la tabla de usuarios tiene que existir un campo llamado <strong>perfil_id</strong> en caso de no existir nos mostrara un error.</p>
<p>El modelo del perfil:</p>

<div class="wp_syntax"><div class="code"><pre class="php"><span style="color: #000000; font-weight: bold;">class</span> Perfil <span style="color: #000000; font-weight: bold;">extends</span> AppModel <span style="color: #009900;">&#123;</span>
  <span style="color: #000088;">$belongsTo</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Usuario'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Ahora seguimos con el modelo del perfil, aqui lo que hacemos es la asociación inversa a la de usuario, es decir, un perfil pertence a un usuario.</p>
<p>Para no perder el enfoque de este tutorial, me voy a saltar la creación del controlador y vistas para el modelo perfil, asumo que ya debes tener registros en la tabla perfiles.</p>
<p>Necesitamos agregar un usuario y que este mismo este relacionado a un perfil, la elección del perfil comunmente se hace vía un select box, por lo cual así lo haremos, antes de crear la vista para agregar el usuario es necesario construir el controlador:</p>

<div class="wp_syntax"><div class="code"><pre class="php"><span style="color: #000000; font-weight: bold;">class</span> UsuariosController <span style="color: #000000; font-weight: bold;">extends</span> AppController <span style="color: #009900;">&#123;</span>
  <span style="color: #000000; font-weight: bold;">function</span> agregar<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$perfilOpciones</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Usuario</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Perfil</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">find</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'list'</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;">set</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">compact</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'perfilOpciones'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #339933;">...</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Utilizamos el encadenamiento hasta llegar al modelo perfil y hacemos una busqueda con el metodo <em>find</em> enviando como parametro <em>list</em> esto nos devolvera un arreglo con la siguiente estructura:</p>

<div class="wp_syntax"><div class="code"><pre class="php"><span style="color: #cc66cc;">0</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">&quot;Administrador&quot;</span><span style="color: #339933;">,</span>
<span style="color: #cc66cc;">1</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">&quot;Moderador&quot;</span><span style="color: #339933;">,</span>
<span style="color: #cc66cc;">2</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">&quot;Invitado&quot;</span></pre></div></div>

<p>Si la en la estructura que te devuelve el arreglo en el valor de la llave vez un numero probablemente sea el id del registro esto es por la convención de cake, la cual indica que si no existe un campo llamado <strong>title</strong> en la tabla perfiles, entonces usara el campo id. Esto puede ser rapidamente modificado solo agregando la siguiente linea al modelo del perfil:</p>

<div class="wp_syntax"><div class="code"><pre class="php"><span style="color: #000000; font-weight: bold;">var</span> <span style="color: #000088;">$displayField</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'nombre_del_campo'</span><span style="color: #339933;">;</span></pre></div></div>

<p>De tal manera sobreescribimos el campo predeterminado que es title.</p>
<p>Ahora continuaremos con la vista para el metodo agregar del controlador de usuarios:</p>

<div class="wp_syntax"><div class="code"><pre class="php"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
  <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$form</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">create</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Usuario'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'action'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'agregar'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</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;">'perfil_id'</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;">'options'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$perfilOpciones</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #339933;">..</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>El código anterior funciona, pero no estamos aprovechando las conveciones que cakePHP nos ofrece, para explotarlas al maximo lo primero que debemos hacer es modificar el controlador y hacer un cambio muy sencillo:</p>

<div class="wp_syntax"><div class="code"><pre class="php"><span style="color: #000088;">$perfiles</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Usuario</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Perfil</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">find</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'list'</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;">set</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">compact</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'perfiles'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>La unica modificación que hicimos fue renombrar la variable, noten la convención, estamos nombrando la variable con el plural del modelo es decir, nuestro modelo se llama perfil, por consecuencia el plural seria perfiles, tomen nota que es un plural irregular por lo cual lo tenemos que definir en el archivo <em>inflections.php</em> que viene acompañado con cake.</p>
<p>Lo siguiente es modificar la vista, como estamos siguiendo convenciones la vista quedaria simplificada a lo siguiente:</p>

<div class="wp_syntax"><div class="code"><pre class="php"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
  <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$form</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">create</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Usuario'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'action'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'agregar'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</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;">'perfil_id'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #339933;">..</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>Como pueden observar en el metodo input solo pasamos el nombre del campo, el helper HTML de cakePHP se encargara del resto, como definir de que tipo de elemento utilizara en este caso seria un select por las convenciones que estamos siguiendo, así como tambien rellenara con las opciones para el select.</p>
]]></content:encoded>
			<wfw:commentRss>http://gomflo.com/2010/03/25/select-box-en-cakephp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

