Blogbonzo: Matteo Magni

Consulente Informatico, Web Developer & System Administrator

CakePHP, Blog[2]

2 comments

Andiamo avanti con la realizzazione del blog scritto con CakePHP.

Devo creare il meccanismo la creazione, modifica e eliminzaione dei post.

Aggiungere i Post
/app/controllers/posts_controller.php

< ?php
class PostsController extends AppController
{
var $name = 'Posts';
function index()
{
$this->set('posts', $this->Post->findAll());
}
function view($id = null)
{
$this->Post->id = $id;
$this->set('post', $this->Post->read());
}
function add()
{
if (!empty($this->data))
{
if ($this->Post->save($this->data))
{
$this->flash('Your post has been saved.','/posts');
}
}
}
}
?>

Il controller guarda che i dati inviati via POST non siano vuoti, se non lo sono utilizza il metodo per salvare i dati. Con il metodo flash è possibile visualizzare un messaggio che dice se i dati sono stati salvati.

Creo la vista add

/app/views/posts/add.thtml

< <h1>Add Post</h1>
<form method="post" action="url('/posts/add')?>">
<p>
Title:
< ?php echo $html->input('Post/title', array('size' => '40'))?>
< ?php echo $html->tagErrorMsg('Post/title', 'Title is required.') ?>
</p>
<p>
Body:
< ?php echo $html->textarea('Post/body', array('rows'=>'10')) ?>
< ?php echo $html->tagErrorMsg('Post/body', 'Body is required.') ?>
</p>
<p>
< ?php echo $html->submit('Save') ?>
</p>
</form>

ecco come si visualizza la pagina:
http://localhost/cake/posts/add
creazione post

Modifico il modello Post
/app/models/post.php
aggiungo la validazione dei dati.


< ?php
class Post extends AppModel
{
var $name = 'Post';
var $validate = array(
'title' => VALID_NOT_EMPTY,
'body' => VALID_NOT_EMPTY
);
}
?>

L’array $validate dice a Cake come validare i dati quando è chiamato il metodo save(). I valori per queste chiave si possono vedere in /cake/libs/validators.php.


/**
* Not empty.
*/
define('VALID_NOT_EMPTY', '/.+/');
/**
* Numbers [0-9] only.
*/
define('VALID_NUMBER', '/^[-+]?\\b[0-9]*\\.?[0-9]+\\b$/');
/**
* A valid email address.
*/
define('VALID_EMAIL', '/\\A(?:^([a-z0-9][a-z0-9_\\-\\.\\+]*)@([a-z0-9][a-z0-9\\.\\-]{0,63}\\.(com|org|net|biz|info|name|net|pro|aero|coop|museum|[a-z]{2,4}))$)\\z/i');
/**
* A valid year (1000-2999).
*/
define('VALID_YEAR', '/^[12][0-9]{3}$/');

Ecco cosa succede se si prova ad inserire un post senza il titolo:

title request

Cancellare i post, azione delete
/app/controllers/posts_controller.php


< ?php
class PostsController extends AppController
{
var $name = 'Posts';
function index()
{
$this->set('posts', $this->Post->findAll());
}
function view($id = null)
{
$this->Post->id = $id;
$this->set('post', $this->Post->read());
}
function add()
{
if (!empty($this->data))
{
if ($this->Post->save($this->data))
{
$this->flash('Your post has been saved.','/posts');
}
}
}
function delete($id)
{
$this->Post->del($id);
$this->flash('The post with id: '.$id.' has been deleted.', '/posts');
}
}
?>

Aggiungo il link delete nella vista index
/app/views/posts/index.thtml


< ?php
echo $html->link(
'Delete',
"/posts/delete/{$post['Post']['id']}",
null,
'Are you sure?'
)
?>

se clicco mi si apre un alert javascript che mi chiede se sono sicuro.
Se disabilito javascript nel browser il post viene cancellato senza richiesta di conferma.

Modificare i post, azione edit
/app/controllers/posts_controller.php


function edit($id = null)
{
if (empty($this->data))
{
$this->Post->id = $id;
$this->data = $this->Post->read();
}
else
{
if ($this->Post->save($this->data['Post']))
{
$this->flash('Your post has been updated.','/posts');
}
}
}

Creo la vista edit
/app/views/posts/edit.thtml


<h1>Edit Post</h1>
<form method="post" action="< ?php echo $html->url('/posts/edit')?>">
< ?php echo $html->hidden('Post/id'); ?>
<p>
Title:
< ?php echo $html->input('Post/title', array('size' => '40'))?>
< ?php echo $html->tagErrorMsg('Post/title', 'Title is required.') ?>
</p>
<p>
Body:
< ?php echo $html->textarea('Post/body', array('rows'=>'10')) ?>
< ?php echo $html->tagErrorMsg('Post/body', 'Body is required.') ?>
</p>
<p>
< ?php echo $html->submit('Save') ?>
</p>
</form>

aggiungo il link edit nella vista index
/app/views/posts/index.thtml


< ?php echo $html->link('Edit', '/posts/edit/'.$post['Post']['id']);?>

Modifica pagina di home
/app/config/routes.php

Nel file routes.php ci sono le configurazioni per i controller e le relative viste che si devono aprire per i vari indirizzi.

Modifico commentando

//$Route->connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));

e settando:

/**
* Collegamento alla pagina index
*
*/
$Route->connect ('/', array('controller'=>'posts', 'action'=>'index'));

Così andando a http://localhost/cake mi apre direttamente la vista index del controller posts.

Ecco fatto, ora il sistema di gestione dei Post è finito, il prossimo obbiettivo è implementare un sistema di gestione degli utenti che possono inviare i post.

Gabba Gabba Hey
Bonzo

Written by Bonzo

febbraio 11th, 2008 at 2:31 pm

Posted in LinkedIn, cakePHP

2 Responses to 'CakePHP, Blog[2]'

Subscribe to comments with RSS or TrackBack to 'CakePHP, Blog[2]'.

  1. Il blog è visibile all’indirizzo:
    http://ilbonzo.org/projects/pepe/

    Bonzo

    12 feb 08 at 15:59

  2. per chi vuole vedere le future evoluzioni del codice ecco il progetto svn:
    http://svn.ilbonzo.org/pepe/

    Bonzo

    13 feb 08 at 16:28

Leave a Reply