• Aucun résultat trouvé

A présent, mettons en place un moyen de supprimer les articles pour les utilisateurs. Démarrons avec une action delete()dans le controller Articles (ArticlesController) :

// src/Controller/ArticlesController.php public function delete($id)

{

$this->request->allowMethod(['post', 'delete']);

$article = $this->Articles->get($id); if ($this->Articles->delete($article)) {

$this->Flash->success(__("L'article avec l'id: {0} a été supprimé.", h($id))); return $this->redirect(['action' => 'index']);

} }

Cette logique supprime l’article spécifié par $id, et utilise $this->Flash->success() pour afficher à l’utili- sateur un message de confirmation après l’avoir redirigé sur /articles. Si l’utilisateur tente une suppression en utilisant une requête GET, une exception est levée. Les exceptions manquées sont capturées par le gestionnaire d’ex- ceptions de CakePHP et un joli message d’erreur est affiché. Il y a plusieursExceptionsintégrées qui peuvent être utilisées pour indiquer les différentes erreurs HTTP que votre application pourrait rencontrer.

Etant donné que nous exécutons juste un peu de logique et de redirection, cette action n’a pas de vue. Vous voudrez peut-être mettre à jour votre vue index avec des liens pour permettre aux utilisateurs de supprimer des articles, ainsi :

<!-- File: src/Template/Articles/index.ctp -->

<h1>Blog articles</h1>

<p><?= $this->Html->link('Ajouter un Article', ['action' => 'add']) ?></p> <table> <tr> <th>Id</th> <th>Title</th> <th>Created</th> <th>Actions</th> </tr>

<!-- C'est ici que nous itérons à travers notre objet query $articles, --> <!-- en affichant les informations de l'article -->

<?php foreach ($articles as $article): ?> <tr>

<td><?= $article->id ?></td> <td>

<?= $this->Html->link($article->title, ['action' => 'view', $article-> ˓→id]) ?>

</td> <td>

<?= $article->created->format(DATE_RFC850) ?> </td>

<td>

<?= $this->Form->postLink(

'Supprimer',

['action' => 'delete', $article->id], ['confirm' => 'Etes-vous sûr?']) ?>

<?= $this->Html->link('Modifier', ['action' => 'edit', $article->id]) ?> </td>

</tr>

<?php endforeach; ?>

</table>

UtiliserView\Helper\FormHelper::postLink()permet de créer un lien qui utilise du JavaScript pour sup- primer notre article en faisant une requête POST.

Avertissement : Autoriser la suppression par une requête GET est dangereux à cause des robots d’indexation qui peuvent tous les supprimer.

Note : Ce code de vue utilise aussi le helper FormHelper pour demander à l’utilisateur une confirmation JavaScript avant de supprimer un article.

Routes

Pour certains, le routage par défaut de CakePHP fonctionne suffisamment bien. Les développeurs qui sont sensibles à la facilité d’utilisation et à la compatibilité avec les moteurs de recherches apprécieront la manière dont CakePHP lie des URLs à des actions spécifiques. Nous allons donc faire une rapide modification des routes dans ce tutoriel. Pour plus d’informations sur les techniques de routages, consultez le chapitreConnecter les Routes.

Par défaut, CakePHP effectue une redirection d’une personne visitant la racine de votre site (par ex :http://www. exemple.com) vers le controller Pages (PagesController) et affiche le rendu de la vue appelée « home ». Au lieu de cela, nous voudrions la remplacer avec notre controller Articles (ArticlesController).

Le routage de CakePHP se trouve dans config/routes.php. Vous devrez commenter ou supprimer la ligne qui définit la route par défaut. Elle ressemble à cela :

$routes->connect('/', ['controller' => 'Pages', 'action' => 'display', 'home']);

Cette ligne connecte l’URL “/” à la page d’accueil par défaut de CakePHP. Nous voulons que cette URL soit connectée à notre propre controller, remplacez donc la ligne par celle-ci :

$routes->connect('/', ['controller' => 'Articles', 'action' => 'index']);

Cela devrait connecter les utilisateurs demandant “/” à l’action index() de notre controller Articles (ArticlesController).

Note : CakePHP peut aussi faire du “reverse routing” (ou routage inversé). Par exemple, pour la route définie plus haut, en ajoutant ['controller' => 'Articles', 'action' => 'index'] à la fonction retournant un tableau, l’URL “/” sera utilisée. Il est d’ailleurs bien avisé de toujours utiliser un tableau pour les URLs afin que vos routes définissent où vont les URLs, mais aussi pour s’assurer qu’elles aillent dans la même direction.

Conclusion

Créer des applications de cette manière vous apportera, paix, honneur, amour et argent au-delà même de vos fantasmes les plus fous. Simple n’est ce pas ? Gardez à l’esprit que ce tutoriel était très basique. CakePHP a beaucoup plus de fonctionnalités à offrir et il est aussi souple dans d’autres domaines que nous n’avons pas souhaité couvrir ici pour simplifier les choses. Utilisez le reste de ce manuel comme un guide pour développer des applications plus riches en fonctionnalités.

Maintenant que vous avez créé une application CakePHP basique, vous pouvez soit continuer vers Tutoriel d’un Blog - Partie 3, ou commencer votre propre projet. Vous pouvez aussi lire attentivement les /topics ou l”API <https ://api.cakephp.org>pour en apprendre plus sur CakePHP.

Si vous avez besoin d’aide, il y a plusieurs façons d’obtenir de l’aide - merci de regarder la pageOù obtenir de l’aide Bienvenue sur CakePHP !

Prochaines lectures suggérées

Voici les différents chapitres que les gens veulent souvent lire après : 1. Layouts: Personnaliser les Layouts de votre application. 2. Elements: Inclure et réutiliser les portions de vues.

3. Génération de Code avec BakeGénérer un code CRUD basique.

4. Tutoriel d’un Blog - Authentification et Autorisations: Tutoriel sur l’enregistrement et la connexion d’utilisa- teurs.

Tutoriel d’un Blog - Partie 3