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
<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 />
function add()<br />
{<br />
if (!empty($this->data))<br />
{<br />
if ($this->Post->save($this->data))<br />
{<br />
$this->flash('Your post has been saved.','/posts');<br />
}<br />
}<br />
}<br />
}<br />
?><br />
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>
`
ecco come si visualizza la pagina:
http://localhost/cake/posts/add
Modifico il modello Post
/app/models/post.php
aggiungo la validazione dei dati.
<br />
< ?php<br />
class Post extends AppModel<br />
{<br />
var $name = 'Post';<br />
var $validate = array(<br />
'title' => VALID_NOT_EMPTY,<br />
'body' => VALID_NOT_EMPTY<br />
);<br />
}<br />
?>
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:
Cancellare i post, azione delete
/app/controllers/posts_controller.php
<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 />
function add()<br />
{<br />
if (!empty($this->data))<br />
{<br />
if ($this->Post->save($this->data))<br />
{<br />
$this->flash('Your post has been saved.','/posts');<br />
}<br />
}<br />
}<br />
function delete($id)<br />
{<br />
$this->Post->del($id);<br />
$this->flash('The post with id: '.$id.' has been deleted.', '/posts');<br />
}<br />
}<br />
?><br />
Aggiungo il link delete nella vista index
/app/views/posts/index.thtml
<br />
< ?php<br />
echo $html->link(<br />
'Delete',<br />
"/posts/delete/{$post['Post']['id']}",<br />
null,<br />
'Are you sure?'<br />
)<br />
?><br />
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
<br />
function edit($id = null)<br />
{<br />
if (empty($this->data))<br />
{<br />
$this->Post->id = $id;<br />
$this->data = $this->Post->read();<br />
}<br />
else<br />
{<br />
if ($this->Post->save($this->data['Post']))<br />
{<br />
$this->flash('Your post has been updated.','/posts');<br />
}<br />
}<br />
}<br />
Creo la vista edit
/app/views/posts/edit.thtml
`
Edit Post
`
aggiungo il link edit nella vista index
/app/views/posts/index.thtml
<br />
< ?php echo $html->link('Edit', '/posts/edit/'.$post['Post']['id']);?><br />
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
<br />
//$Route->connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));<br />
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