Comincio a fare “sul serio” con l’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 chiamata id;
- 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);
- è possibile includere i campi created e modified che verranno automaticamente aggiornati da CakePHP quando si opererà sui record.
Cake contiente una classe inflections che si occupa di ottenere i plurali dei vari nomi.
Creo il database blog_cake.
Creo la tabella posts.
<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 />
<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 />
Imposto i dati di connessione al database nel file /app/config/database.php
`
var $default = array(‘driver’ => ‘mysql’,
‘connect’ => ‘mysql_pconnect’,
‘host’ => ‘localhost’,
‘login’ => ‘
'password' => '
'database' => 'blog_cakel' );
</utente>`
Cake contiene una Classe AppModel da cui si parte per ottenere i nuovi modelli, estendendo tale classe di partenza.
Creo il modello Post:
/app/models/post.php
<br />
< ?php<br />
class Post extends AppModel<br />
{<br />
var $name = 'Post';<br />
}<br />
?><br />
Creo il controller Post
Dato che abbiamo deciso di seguire le convenzioni sui nomi sarà possibile accedere ai modelli implementati direttamente attraverso $this->NOME_MODELLO.
/app/controllers/posts_controller.php
< ?php<br />
class PostsController extends AppController<br />
{<br />
var $name = 'Posts';<br />
}<br />
?><br />
Ci aggiungo l’azione index
<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 />
?>
Il metodo index registra un array con tutti i post inseriti utilizzando il metodo set, che rende disponibile questo array alla vista.
Creo la vista index
- /app/views/posts/index.thtml*
`
Blog
< ?php foreach ($posts as $post): ?>
<dl>
<dt>
<h3>< ?php echo $html->link($post[‘Post’][‘title’], “/posts/view/”.$post[‘Post’][‘id’]); ?></h3>
< ?php
echo $post[‘Post’][‘id’];
echo ‘
’;
echo $post[‘Post’][‘created’];
echo ‘<br/>’;
echo ‘
’;
?>
</dt>
<dd>
< ?php
echo $post[‘Post’][‘body’];
?>
</dd>
</dl>
< ?php endforeach; ?>
`
Vado con il browser all’indirizzo:
http://localhost/cake/posts/
ed ecco il risultato:
Ora aggiungo l’azione view al controller, per gestire la visualizzazione di un singolo post.
<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 />
Creo la vista view
/app/views/posts/view.thtml
`
< ?php echo $post['Post']['title']?>
Created: < ?php echo $post['Post']['created']?>
< ?php echo $post['Post']['body']?>
`
Ora se clicco sul titolo del primo post, mi sposto all’indirizzo:
http://localhost/cake/posts/view/1
e vedo la vista view di questo post.
Così ho completato tutte le pagine per visualizzare il blog, la prossima volta passo alle pagine per inserimento, modifica e cancellazione dei post.
Gabba Gabba Hey
Bonzo