<?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>Blogbonzo: Matteo Magni &#187; blog</title>
	<atom:link href="http://blog.ilbonzo.org/tag/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.ilbonzo.org</link>
	<description>Consulente Informatico, Web Developer &#38; System Administrator</description>
	<lastBuildDate>Wed, 09 Dec 2009 13:07:18 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>CakePHP, Blog [1]</title>
		<link>http://blog.ilbonzo.org/2008/02/05/cakephp-blog-1/</link>
		<comments>http://blog.ilbonzo.org/2008/02/05/cakephp-blog-1/#comments</comments>
		<pubDate>Tue, 05 Feb 2008 12:51:41 +0000</pubDate>
		<dc:creator>Bonzo</dc:creator>
				<category><![CDATA[LinkedIn]]></category>
		<category><![CDATA[cakePHP]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[Programmazione]]></category>

		<guid isPermaLink="false">http://blog.ilbonzo.org/2008/02/05/cakephp-blog-1/</guid>
		<description><![CDATA[Comincio a fare &#8220;sul serio&#8221; con l&#8217;uso di CAkePHP, ora proverò a creare un blog.
Creazione database

Per prima cosa
Ecco alcuni accorgimenti sulle regole che devono seguire le tabelle (naming convention):

I nomi devono essere in plurale inglese (posts ad esempio), in modo che i modelli corrispondenti abbiano nomi in singolare;
tutte le tabelle devono avere una chiave primaria [...]]]></description>
			<content:encoded><![CDATA[<p>Comincio a fare &#8220;sul serio&#8221; con l&#8217;uso di CAkePHP, ora proverò a creare un blog.</p>
<p><strong>Creazione database</strong></p>
<blockquote><p>
Per prima cosa<br />
Ecco alcuni accorgimenti sulle regole che devono seguire le tabelle (naming convention):</p>
<ul>
<li>I nomi devono essere in plurale inglese (posts ad esempio), in modo che i modelli corrispondenti abbiano nomi in singolare;</li>
<li>tutte le tabelle devono avere una chiave primaria chiamata id;
        </li>
<li>le chiavi esterne utilizzate per costruire le relazioni tra le tabelle devono essere nomiate utilizzando il singolare della tabella a cui fanno riferimento seguito da _id (post_id per esempio);</li>
<li> è possibile includere i campi created e modified che verranno automaticamente aggiornati da CakePHP quando si opererà sui record.
</li>
</ul>
<p>Cake contiente una classe <em>inflections</em> che si occupa di ottenere i plurali dei vari nomi.</p>
</blockquote>
<p>Creo il database <strong>blog_cake</strong>.</p>
<p>Creo la tabella <strong>posts</strong>.<br />
<code><br />
/* First, create our posts table: */<br />
CREATE TABLE posts (<br />
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,<br />
    title VARCHAR(50),<br />
    body TEXT,<br />
    created DATETIME DEFAULT NULL,<br />
    modified DATETIME DEFAULT NULL<br />
);<br />
</code><br />
<code><br />
/* Then insert some posts for testing: */<br />
INSERT INTO posts (title,body,created)<br />
    VALUES ('il titolo', 'Questo è il contenuto di un post.', NOW());<br />
INSERT INTO posts (title,body,created)<br />
    VALUES ('secondo titolo', 'Altro contenuto di un post.', NOW());<br />
INSERT INTO posts (title,body,created)<br />
    VALUES ('Divetimento', 'Divertiamoci.', NOW());<br />
</code></p>
<p>Imposto i dati di connessione al database nel file <em>/app/config/database.php</em><br />
<code><br />
var $default = array('driver'   => 'mysql',<br />
                     'connect'  => 'mysql_pconnect',<br />
                     'host'     => 'localhost',<br />
                     'login'    => '<utente>',<br />
                     'password' => '
<password>',<br />
                     'database' => 'blog_cakel' );
</password></utente></code></p>
<p>Cake contiene una Classe AppModel da cui si parte per ottenere i nuovi modelli, estendendo tale classe di partenza.</p>
<p><strong>Creo il modello Post:</strong></p>
<p><em>/app/models/post.php</em></p>
<p><code><br />
< ?php<br />
class Post extends AppModel<br />
{<br />
    var $name = 'Post';<br />
}<br />
?><br />
</code></p>
<p><strong>Creo il controller Post</strong><br />
Dato che abbiamo deciso di seguire le convenzioni sui nomi sarà possibile accedere ai modelli implementati direttamente attraverso $this->NOME_MODELLO.<br />
<em>/app/controllers/posts_controller.php</em></p>
<p><code>< ?php<br />
class PostsController extends AppController<br />
{<br />
    var $name = 'Posts';<br />
}<br />
?><br />
</code></p>
<p>Ci aggiungo l&#8217;azione index</p>
<p><code><br />
< ?php<br />
class PostsController extends AppController<br />
{<br />
    var $name = 'Posts';<br />
    function index()<br />
    {<br />
        $this->set('posts', $this->Post->findAll());<br />
    }<br />
}<br />
?></code></p>
<p>Il metodo index registra un array con tutti i post inseriti utilizzando il metodo set, che rende disponibile questo array alla vista.</p>
<p><strong>Creo la vista index</strong><br />
<em><br />
/app/views/posts/index.thtml</em></p>
<p><code><br />
&lt;h1&gt;Blog&lt;/h1&gt;<br />
    < ?php foreach ($posts as $post): ?><br />
    &lt;dl&gt;<br />
		&lt;dt&gt;<br />
		&lt;h3&gt;< ?php echo $html->link($post['Post']['title'], "/posts/view/".$post['Post']['id']); ?>&lt;/h3&gt;<br />
        < ?php<br />
			echo $post['Post']['id'];<br />
			echo '&lt;br/&gt;';<br />
			echo $post['Post']['created'];<br />
			echo '&lt;br/&#038;gt';<br />
			echo '&lt;br/&gt;';<br />
		?><br />
		&lt;/dt&gt;<br />
		&lt;dd&gt;<br />
		< ?php<br />
			echo $post['Post']['body'];<br />
		?><br />
		&lt;/dd&gt;<br />
	&lt;/dl&gt;<br />
   < ?php endforeach; ?><br />
</code></p>
<p>Vado con il browser all&#8217;indirizzo:<br />
<em>http://localhost/cake/posts/</em><br />
ed ecco il risultato:</p>
<p><a href='http://blog.ilbonzo.org/wp-content/uploads/2008/01/001_post.PNG' title='cakePHP blog' rel='lightbox'><img src='http://blog.ilbonzo.org/wp-content/uploads/2008/01/001_post.thumbnail.PNG' alt='cakePHP blog' /></a></p>
<p>Ora aggiungo l&#8217;azione view al controller, per gestire la visualizzazione di un singolo post.</p>
<p><code><br />
< ?php<br />
class PostsController extends AppController<br />
{<br />
    var $name = 'Posts';<br />
    function index()<br />
    {<br />
        $this->set('posts', $this->Post->findAll());<br />
    }<br />
	function view($id = null)<br />
    {<br />
        $this->Post->id = $id;<br />
        $this->set('post', $this->Post->read());<br />
    }<br />
}<br />
?><br />
</code></p>
<p><strong>Creo la vista view</strong><br />
<em>/app/views/posts/view.thtml</em></p>
<p><code><br />
&lt;h2&gt;< ?php echo $post['Post']['title']?>&lt;/h2&gt;<br />
&lt;p&gt;&lt;small&gt;Created: < ?php echo $post['Post']['created']?>&lt;/small&gt;&lt;/p&gt;<br />
&lt;p&gt;< ?php echo $post['Post']['body']?>&lt;/p&gt;<br />
</code></p>
<p>Ora se clicco sul titolo del primo post, mi sposto all&#8217;indirizzo:<br />
<em>http://localhost/cake/posts/view/1</em></p>
<p>e vedo la vista view di questo post.</p>
<p><a href='http://blog.ilbonzo.org/wp-content/uploads/2008/02/002_single_post1.png' title='post singolo' rel='lightbox'><img src='http://blog.ilbonzo.org/wp-content/uploads/2008/02/002_single_post1.thumbnail.png' alt='post singolo' /></a></p>
<p>Così ho completato tutte le pagine per visualizzare il blog, la prossima volta passo alle pagine per inserimento, modifica e cancellazione dei post.</p>
<p>Gabba Gabba Hey<br />
Bonzo</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ilbonzo.org/2008/02/05/cakephp-blog-1/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>
