<?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>El blog de Cristian Deluxe &#187; cakephp</title>
	<atom:link href="http://blog.cristiandeluxe.com/tag/cakephp/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.cristiandeluxe.com</link>
	<description>Un espacio para poner mis cosas</description>
	<lastBuildDate>Sat, 10 Jul 2010 12:50:48 +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>Guardando ajustes para nuestra aplicación con CakePHP</title>
		<link>http://blog.cristiandeluxe.com/2008/12/09/guardando-ajustes-para-nuestra-aplicacion-con-cakephp/</link>
		<comments>http://blog.cristiandeluxe.com/2008/12/09/guardando-ajustes-para-nuestra-aplicacion-con-cakephp/#comments</comments>
		<pubDate>Mon, 08 Dec 2008 23:30:30 +0000</pubDate>
		<dc:creator>CristianDeluxe</dc:creator>
				<category><![CDATA[diseño web]]></category>
		<category><![CDATA[cakephp]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.cristiandeluxe.com/?p=49</guid>
		<description><![CDATA[Si te gusta desarrollar páginas aplicaciones web con PHP y aún no usas ningún framework de los varios que hay, no se a qué estás esperando, no voy a exponer aquí las múltiples ventajas de usar un framework, o cuál es mejor, todo se lo puedes preguntar a Google. Yo personalmente uso CakePHP, y algunas [...]


No hay entradas relacionadas.

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p>Si te gusta desarrollar <span style="text-decoration: line-through;">páginas</span> aplicaciones web con PHP y aún no usas ningún framework de los varios que hay, no se a qué estás esperando, no voy a exponer aquí las múltiples ventajas de usar un framework, o cuál es mejor, todo se lo puedes <a target="_blank" title="Frameworks PHP" href="http://www.google.com/search?q=framework+php">preguntar a Google</a>.</p>
<p>Yo personalmente uso <a target="_blank" title="CakePHP" href="http://cakephp.org/">CakePHP</a>, y algunas veces, necesitamos guardar los ajustes de nuestra aplicación, por ejemplo: claves API, emails, datos de contacto, etc..</p>
<p>Navegando por <a target="_blank" title="The Bakery" href="http://bakery.cakephp.org">The Bakery</a> (de entrada casi obligatoria para cualquier desarrollador de CakePHP) me encontré con <a target="_blank" title="Simply storing config values in the DB" href="http://bakery.cakephp.org/articles/view/simply-storing-config-values-in-the-db">este artículo</a> escrito por Cameron Perry en el que explicaba cómo guardar en nuestra base de datos todos los ajustes en un array serializado.</p>
<p>Es casi lo que necesito, pero no me gusta la idea de tenerlo todo en un array, es un atraso, teniendo bases de datos potentísimas como es MySQL, por lo que me puse manos a la obra y modifiqué el trabajo de Cameron.</p>
<p>La idea básicamente es la misma, pero en vez de guardar todos los ajustes juntos en una columna voy a guardar cada uno por separado, esto nos permitirá que los admins de nuestra aplicación puedan cambiar los ajustes como ellos quieran.</p>
<p>Vamos a ponernos manos a la obra.</p>
<h3>1) Crear nuestra tabla en la base de datos</h3>
<p>El primer paso obviamente es crear la tabla donde se almacenarán todos los ajustes, podemos hacerlo con una simple consulta como esta:</p>
<div class="geshi no mysql">
<div class="head">CREATE TABLE `settings` (</div>
<ol>
<li class="li1">
<div class="de1">&nbsp; `id` <span class="kw2">INT</span><span class="br0">&#40;</span><span class="nu0">10</span><span class="br0">&#41;</span> <span class="kw3">UNSIGNED</span> <span class="kw3">NOT NULL</span> <span class="kw3">AUTO_INCREMENT</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; `key` <span class="kw2">VARCHAR</span><span class="br0">&#40;</span><span class="nu0">48</span><span class="br0">&#41;</span> <span class="kw3">NOT NULL</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; `value` <span class="kw2">TEXT</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">PRIMARY KEY</span> &nbsp;<span class="br0">&#40;</span>`id`<span class="br0">&#41;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw3">UNIQUE</span> KEY `key` <span class="br0">&#40;</span>`key`<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#41;</span></div>
</li>
</ol>
</div>
<h3>2) Crear el modelo, el controlador y las vistas</h3>
<p>Utilizando &#8220;<strong>cake bake</strong>&#8221; creamos rápidamente el modelo, el controlador y las vistas.</p>
<p>Una vez creado, modifica el archivo de modelo, en este caso &#8220;setting.php&#8221; (normalmente está en la carpeta &#8220;app/models&#8221;), con lo siguiente:</p>
<div class="geshi no php">
<div class="head">class Setting extends AppModel {</div>
<ol>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">var</span> <span class="re1">$name</span> <span class="sy0">=</span> <span class="st0">&#39;Setting&#39;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">var</span> <span class="re1">$key</span> <span class="sy0">=</span> <span class="st0">&#39;Opc&#39;</span><span class="sy0">;</span> <span class="co1">// Se puede cambiar por lo que quieras</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">var</span> <span class="re1">$custom_settings</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">// Recibe los datos de configuración de la base de datos</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">function</span> getcfg<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="co1">// Consigue los datos de configuración de la base de datos y los mete en un array</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re1">$cfgs</span> <span class="sy0">=</span> <span class="re1">$this</span><span class="sy0">-&amp;</span>gt<span class="sy0">;</span>find<span class="br0">&#40;</span><span class="st0">&#39;all&#39;</span><span class="sy0">,</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="st0">&#39;fields&#39;</span><span class="sy0">=&amp;</span>gt<span class="sy0">;</span>array<span class="br0">&#40;</span><span class="st0">&#39;id&#39;</span><span class="sy0">,</span><span class="st0">&#39;key&#39;</span><span class="sy0">,</span><span class="st0">&#39;value&#39;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="co1">// Si no es un array salimos</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">if</span><span class="br0">&#40;</span> <span class="sy0">!</span><span class="kw3">is_array</span><span class="br0">&#40;</span><span class="re1">$cfgs</span><span class="br0">&#41;</span> <span class="br0">&#41;</span> <span class="kw1">return</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="co1">// Procesamos cada configuración</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">foreach</span><span class="br0">&#40;</span><span class="re1">$cfgs</span> <span class="kw1">as</span> <span class="re1">$cfg</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="co1">// Crea el array para usarlo más tarde</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="re1">$data_array</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="st0">&#39;id&#39;</span> <span class="sy0">=&amp;</span>gt<span class="sy0">;</span> <span class="re1">$cfg</span><span class="br0">&#91;</span><span class="st0">&#39;Setting&#39;</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#39;id&#39;</span><span class="br0">&#93;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="st0">&#39;key&#39;</span> <span class="sy0">=&amp;</span>gt<span class="sy0">;</span> <span class="re1">$cfg</span><span class="br0">&#91;</span><span class="st0">&#39;Setting&#39;</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#39;key&#39;</span><span class="br0">&#93;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="st0">&#39;value&#39;</span> <span class="sy0">=&amp;</span>gt<span class="sy0">;</span> <span class="re1">$cfg</span><span class="br0">&#91;</span><span class="st0">&#39;Setting&#39;</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#39;value&#39;</span><span class="br0">&#93;</span> <span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="re1">$this</span><span class="sy0">-&amp;</span>gt<span class="sy0">;</span>custom_settings<span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="re1">$data_array</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="co1">// Escrebe el array en la configuración de CakePHP</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;Configure<span class="sy0">::</span><span class="me2">write</span><span class="br0">&#40;</span><span class="re1">$this</span><span class="sy0">-&amp;</span>gt<span class="sy0">;</span>key <span class="sy0">.</span> <span class="st0">&#39;.&#39;</span> <span class="sy0">.</span> <span class="re1">$cfg</span><span class="br0">&#91;</span><span class="st0">&#39;Setting&#39;</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#39;key&#39;</span><span class="br0">&#93;</span><span class="sy0">,</span> <span class="re1">$cfg</span><span class="br0">&#91;</span><span class="st0">&#39;Setting&#39;</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#39;value&#39;</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<h3>3) Modificar el archivo AppController</h3>
<p>Bien, lo siguiente es modificar el archivo AppController, si aún no lo has creado ¿a qué esperas?, debe estar en &#8220;app/app_controller.php&#8221;.</p>
<div class="geshi no php">
<div class="head">class AppController extends Controller {</div>
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="kw2">var</span> <span class="re1">$uses</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="st0">&#39;Setting&#39;</span><span class="br0">&#41;</span><span class="sy0">;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="kw2">function</span> beforeFilter<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="co1">// Procesa nuestras configuraciones de la base de datos</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="re1">$this</span><span class="sy0">-&amp;</span>gt<span class="sy0">;</span>Setting<span class="sy0">-&amp;</span>gt<span class="sy0">;</span>getcfg<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<h3>4) ¡Usarlo!</h3>
<p>Pues ya está todo listo, ahora podemos usar nuestros ajustes en cualquier sitio, un ejemplo de cómo hacerlo es:</p>
<div class="geshi no php">
<div class="head">echo &#8220;Mi configuración&#8221; . Configure::read(&#39;Opc.title&#39;); //devuelve &#39;Mi pedazo de página&#39;;</pre>
</div>
<ol>
<li class="li1">
<div class="de1">SI has cambiado el valor de la variable <span class="kw3">key</span> en el paso <span class="nu0">2</span> debes cambiarlo aquí también<span class="sy0">,</span> por ejemplo<span class="sy0">,</span> si has definido <span class="re1">$key</span> como <span class="st0">&quot;MyApp&quot;</span> tienes que leer la configuración <span class="kw1">as</span>í<span class="sy0">:</span></div>
</li>
<li class="li1">
<div class="de1"><span class="sy0">&lt;</span>pre lang<span class="sy0">=</span><span class="st0">&quot;php&quot;</span><span class="sy0">&gt;</span>echo <span class="st0">&quot;Mi configuración&quot;</span> <span class="sy0">.</span> Configure<span class="sy0">::</span><span class="me2">read</span><span class="br0">&#40;</span><span class="st0">&#39;MyApp.title&#39;</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">//devuelve &#39;Mi pedazo de página&#39;;</span></div>
</li>
</ol>
</div>
<p>Como ves CakePHP te deja hacer lo que tengas en la mente, y nunca está de más trabajar sobre el código que otra persona ha realizado, es uno de los principios fundamentales del open source, coger algo que ya está hecho y adaptarlo a sus necesidades. ¡Tú también puedes hacer lo mismo!</p>


<p>No hay entradas relacionadas.</p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.cristiandeluxe.com/2008/12/09/guardando-ajustes-para-nuestra-aplicacion-con-cakephp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
