<?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>jm2dev &#187; controlador</title>
	<atom:link href="http://www.jm2dev.com/tag/controlador/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.jm2dev.com</link>
	<description>desarrollo software en el siglo XXI</description>
	<lastBuildDate>Sun, 28 Aug 2011 16:09:44 +0000</lastBuildDate>
	
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Desarrollo web MAMP con CakePHP (III)</title>
		<link>http://www.jm2dev.com/2009/01/desarrollo-web-mamp-con-cakephp-iii/</link>
		<comments>http://www.jm2dev.com/2009/01/desarrollo-web-mamp-con-cakephp-iii/#comments</comments>
		<pubDate>Sun, 25 Jan 2009 19:28:39 +0000</pubDate>
		<dc:creator>josemiguel</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[controlador]]></category>
		<category><![CDATA[modelo]]></category>
		<category><![CDATA[vista]]></category>

		<guid isPermaLink="false">http://www.jm2dev.com/?p=31</guid>
		<description><![CDATA[En esta tercera y última parte se va a desarrollar la aplicación a partir del esqueleto ya disponible en la aplicación pastelito. La aplicación va listar los productos disponibles y su precio, en este caso tartas, por lo que siguiendo las convenciones de CakePHP se va a crear un modelo (Tarta) que implementa los datos, [...]]]></description>
			<content:encoded><![CDATA[<p>En esta tercera y última parte se va a desarrollar la aplicación a partir del esqueleto ya disponible en la aplicación <em>pastelito</em>. La aplicación va listar los productos disponibles y su precio, en este caso tartas, por lo que siguiendo las convenciones de CakePHP se va a crear un modelo (<strong>Tarta</strong>) que implementa los datos, un controlador (<strong>TartasController</strong>) que realizará la lógica, y una vista (tartas/<code>index</code>.ctp) que mostrará la información y se corresponde con la función definida en el controlador.</p>
<p>Recordemos que en la base de datos se tiene una única tabla (<strong>tartas</strong>) que contiene un registro de cada tarta, de ahí que el modelo se denomine en singular, y se crea en <code>/pastelito/models/tarta.php</code> con el siguiente código:</p>
<p><code>&lt;?php<br />
class Tarta extends AppModel {<br />
var $name = 'Tarta';<br />
}<br />
?&gt;</code></p>
<p>Por otro lado el controlador <code>/pastelito/controllers/tartas_controller.php</code> contiene:</p>
<p><code>&lt;?php<br />
class TartasController extends AppController {<br />
var $name = 'Tartas';</code></p>
<p><code>function index() {<br />
$this-&gt;set('tartas', $this-&gt;Tarta-&gt;findAll());<br />
}<br />
}<br />
?&gt;</code></p>
<p>que define una función que invoca a la vista <strong>tartas/index.ctp</strong> pasando como parámetro todos los registros del modelo <strong>Tarta</strong>.</p>
<p>Finalmente la vista debe presentar el resultado, ahora la vista será un directorio <code>/pastelito/views/tartas</code>, con un fichero <code>index.ctp</code> que genera el código HTML a mostrar por el navegador:</p>
<p><code>&lt;h1&gt;Tartas&lt;/h1&gt;</code></p>
<p><code>&lt;table&gt;<br />
&lt;tr&gt;<br />
&lt;th&gt;Id&lt;/th&gt;<br />
&lt;th&gt;Producto&lt;/th&gt;<br />
&lt;th&gt;Precio (eur.)&lt;/th&gt;<br />
&lt;/tr&gt;</code></p>
<p><code>&lt;?php foreach ($tartas as $tarta): ?&gt;<br />
&lt;tr&gt;<br />
&lt;td&gt;&lt;?php echo $tarta['Tarta']['id']; ?&gt;&lt;/td&gt;<br />
&lt;td&gt;&lt;?php echo $tarta['Tarta']['nombre']; ?&gt;&lt;/td&gt;<br />
&lt;td&gt;&lt;?php echo $tarta['Tarta']['precio']; ?&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;?php endforeach; ?&gt;<br />
&lt;/table&gt;</code></p>
<p>Se puede ver el resultado visualizando la URL <code>http://www.onestic.dev/tartas</code>.</p>
<p><img class="aligncenter size-medium wp-image-33" title="listatartas" src="http://www.jm2dev.com/wp-content/uploads/2009/01/listatartas-300x206.png" alt="listatartas" width="300" height="206" /></p>
<p>Todo bien, pero la aplicación no deja de ser muy sencilla, se va a añadir funcionalidad: al pinchar sobre el producto se ve un detalle del mismo.</p>
<p>Se modifica index.ctp de forma que el identificador sea un hiperenlace que nos lleve a una nueva vista:</p>
<p><code>&lt;td&gt;&lt;?php echo $html -&gt; link($tarta['Tarta']['id'], "/tartas/view/".$tarta['Tarta']['id']); ?&gt;&lt;/td&gt;</code></p>
<p>Se crea <code>view.ctp</code> que será la vista y que recibe como parámetro de entrada el identificador, para recuperar ese registro:</p>
<p><code>&lt;h1&gt;&lt;?php echo $tarta['Tarta']['nombre']?&gt;&lt;/h1&gt;<br />
&lt;p&gt;&lt;small&gt;Precio: &lt;?php echo $tarta['Tarta']['precio']?&gt;&lt;/small&gt;&lt;/p&gt;<br />
&lt;p&gt;&lt;?php echo $tarta['Tarta']['descripcion']?&gt;&lt;/p&gt;</code></p>
<p>Y se añade la acción asociada a la nueva vista en el controllador con la siguiente función:</p>
<p><code>function view($id = null) {<br />
$this-&gt;Tarta-&gt;id = $id;<br />
$this-&gt;set('tarta', $this-&gt;Tarta-&gt;read());<br />
}</code></p>
<p>Nótese la correspondencia de nombres, la función <code>view</code> lee el registro con identificador = id y la vista <code>view.ctp</code> muestra el resultado.</p>
<p><img class="aligncenter size-medium wp-image-44" title="Información del elemento seleccionado." src="http://www.jm2dev.com/wp-content/uploads/2009/01/detalletarta-300x178.png" alt="Información del elemento seleccionado." width="300" height="178" /></p>
<p>Finalmente se edita /pastelito/config/core.php para modificar el nivel de depurado,<br />
<code>Configure::write('debug', 0);</code><br />
y routes.php para redirigir automáticamente a la página inicial que deseemos: <code>http://www.onestic.dev</code>.<br />
<code><br />
Router::connect('/', array('controller' => 'tartas', 'action' => 'index'));</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.jm2dev.com/2009/01/desarrollo-web-mamp-con-cakephp-iii/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

