Cours CAKEPHP

Formation d’introduction à CakePHP pour débutant


Télécharger Formation d’introduction à CakePHP pour débutant

★★★★★★★★★★3.5 étoiles sur 5 basé sur 1 votes.
Votez ce document:

Télécharger aussi :


Formation d’introduction à CakePHP pour débutant

...

Le framework CakePHP fournit une base robuste pour votre application. Il peut gérer tous les aspects, de la requête initiale de l’utilisateur et son cheminement jusqu’au rendu final de la page web. Et puisque le framework suit les principes du MVC, il vous permet de facilement personnaliser et offre la plupart des aspects de votre application.

Le framework fournit aussi une structure organisationnelle basique, des noms de fichier jusqu’aux noms des tables de la base de données, en gardant toute votre application cohérente et logique. Ce concept est simple mais puissant. Suivez les conventions et vous saurez toujours exactement où les choses se trouvent et comment elles sont organisées.

La meilleure façon de découvrir et d’apprendre CakePHP est de s’assoir et de construire quelque chose. Pour commencer, nous construirons une application simple de blog.

Tutoriel d’un Blog

Bienvenue sur CakePHP. Vous consultez probablement ce tutoriel parce que vous voulez en apprendre plus à propos du fonctionnement de CakePHP. C’est notre but d’améliorer la productivité et de rendre le développe¬ment plus agréable : nous espérons que vous le découvrirez au fur et à mesure que vous plongerez dans le code.

Ce tutoriel vous accompagnera à travers la création d’une simple application de blog. Nous récupérerons et installerons Cake, créerons et configurerons une base de données et ajouterons suffisamment de logique applicative pour lister, ajouter, éditer et supprimer des posts.

Voici ce dont vous aurez besoin :

  1. Un serveur web fonctionnel. Nous supposerons que vous utilisez Apache, bien que les instructions pour utiliser d’autres serveurs devraient être très semblables. Nous aurons peut-être besoin de jouer un peu sur la configuration du serveur, mais la plupart des personnes peuvent faire fonctionner Cake sans aucune configuration préalable.
  2. Un serveur de base de données. Dans ce tutoriel, nous utiliserons MySQL. Vous aurez besoin d’un minimum de connaissance en SQL afin de créer une base de données : Cake prendra les rênes à partir de là.
  3. Des connaissances de base en PHP. Plus vous aurez d’expérience en programmation orienté objet, mieux ce sera; mais n’ayez crainte, même si vous êtes adepte de la programmation procédurale.
  4. Enfin, vous aurez besoin de connaissances de base à propos du motif de conception MVC. Un bref aperçu de ce motif dans le chapitre Comprendre le système M-V-C (Model-View-Controller). Ne vous inquiétez pas : il n’y a qu’une demi-page de lecture.

Maintenant, lançons-nous!

Obtenir Cake

Tout d’abord, récupérons une copie récente de Cake.

Pour obtenir la dernière version, allez sur le site GitHub du projet CakePHP : https ://github.com/cakephp/cakephp/tags et téléchargez la dernière version de la 2.0.

Vous pouvez aussi cloner le dépôt en utilisant git (http ://git-scm.com/). git clone git://github.com/cakephp/cakephp.git

Peu importe comment vous l’avez téléchargé, placez le code à l’intérieur du “DocumentRoot” de votre serveur. Une fois terminé, votre répertoire d’installation devrait ressembler à quelque chose comme cela:

/chemin_du_document_root

/app

/lib

/plugins

/vendors

.htaccess

index.php

README

A présent, il est peut-être temps de voir un peu comment fonctionne la structure de fichiers de Cake : lisez le chapitre Structure du dossier de CakePHP.

Créer la base de données du blog

Maintenant, mettons en place la base de données pour notre blog. Si vous ne l’avez pas déjà fait, créez une base de données vide avec le nom de votre choix pour l’utiliser dans ce tutoriel. Pour le moment, nous allons juste créer une simple table pour stocker nos posts. Nous allons également insérer quelques posts à des fins de tests. Exécutez les requêtes SQL suivantes dans votre base de données :

/* D’abord, créons la table des posts    */

CREATE TABLE posts (

id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,

title VARCHAR(50),

body TEXT,

created DATETIME DEFAULT HULL,

modified DATETIME DEFAULT HULL

);

/* Puis insérons quelques posts pour les tests */

INSERT INTO posts (title,body,created)

VALUES (’Le titre’, ’Voici le contenu du post.’, NOW());

INSERT INTO posts (title,body,created)

VALUES (’Encore un titre’, ’Et le contenu du post qui suit.’, NOW());

INSERT INTO posts (title,body,created)

VALUES (’Le retour du titre’, ’C\’est très excitant, non ?’, NOW());

Le choix des noms pour les tables et les colonnes ne sont pas arbitraires. Si vous respectez les conventions de nommage Cake pour les bases de données et les classes (toutes deux expliquées le chapitre Conventions de CakePHP), vous tirerez profit d’un grand nombre de fonctionnalités automatiques et vous éviterez des étapes de configurations. Cake est suffisamment souple pour implémenter les pires schémas de bases de données, mais respecter les conventions vous fera gagner du temps.

Consultez le chapitre Conventions de CakePHP pour plus d’informations, mais il suffit de comprendre que nommer notre table ‘posts’ permet de la relier automatiquement à notre model Post, et qu’avoir des champs ‘modified’ et ‘created’ permet de les avoir gérés automagiquement par Cake.

Configurer la base de données Cake

En avant: indiquons à Cake où se trouve notre base de données et comment s’y connecter. Pour la plupart d’entre vous, c’est la première et dernière fois que vous configurerez quelque chose.

Une copie du fichier de configuration Cake pour la base de données se trouve dans /app/Config/database.php.default. Faites une copie de ce fichier dans le même réper¬toire mais nommez le database.php.

Le fichier de configuration devrait être assez simple : remplacez simplement les valeurs du tableau $default par celles qui correspondent à votre installation. Un exemple de tableau de configuration com¬plet pourrait ressembler à ce qui suit :

);

Une fois votre nouveau fichier database.php sauvegardé, vous devriez être en mesure d’ouvrir votre navigateur internet et de voir la page d’accueil de Cake. Elle devrait également vous indiquer votre fichier de connexion a été trouvé, et que Cake peut s’y connecter avec succès.

Note : Rappelez-vous que vous aurez besoin d’avoir PDO, et pdo_mysql activés dans votre php.ini.

public $default = array(

’datasource’ => ’Database/Mysql’,

’persistent’ => false,

’host’ => ’localhost’,

’port’ => ”,

’login’ => ’cakeBlog’,

’password’ => ’c4k3-rUl3Z’,

’database’ => ’cake_blog_tutorial’,

’schema’ => ”,

’prefix’ => ”,

’encoding’ => ”

Tutoriel d’un Blog           3

Configuration facultative

Il y a trois autres élements qui peuvent être configurés. La plupart des développeurs configurent les éléments de cette petite liste, mais ils ne sont pas obligatoires pour ce tutoriel. Le premier consiste à définir une chaîne de caractères personnalisée (ou “grain de sel”) afin de sécuriser les hashs. Le second consiste à définir un nombre personnalisé (ou “graine”) à utiliser pour le chiffrage. Le troisième est de permettre l’accès en écriture à CakePHP pour son dossier tmp.

Le “grain de sel” est utilisé pour générer des hashes. Changez sa valeur par défaut en modifiant /app/Config/core.php à la ligne 187. La nouvelle valeur n’a pas beaucoup d’importance du mo¬ment qu’elle est difficile à deviner:

/**

* Une chaîne aléatoire utilisée dans les méthodes de hachage sécurisées. */

Configure::write(’Security.salt’, ’pl345e-P45s_7h3*[email protected]!’);

La “graine cipher” est utilisée pour le chiffrage/déchiffrage des chaînes de caractères. Changez sa valeur par défaut en modifiant /app/Config/core.php à la ligne 192. La nouvelle valeur n’a pas beaucoup d’importance du moment qu’elle est difficile à deviner:

/**

* Une chaîne aléatoire de chiffre utilisée pour le chiffrage/déchiffrage



* des chaînes de caractères.

*/

Configure::write(’Security.cipherSeed’, ’7485712659625147843639846751’);

La dernière étape consiste à rendre le dossier /app/tmp accessible en écriture. Le meilleur moyen de faire cela est de trouver sous quel utilisateur votre serveur web s’exécute (<?php echo ‘whoami‘; ?» et de modifier le propriétaire du dossier /app/tmp pour cet utilisateur. La commande à exécuter (sous *nix) devrait ressembler à quelque chose comme cela

$ chown -R www-data app/tmp

Si pour une raison quelconque CakePHP ne peut pas écrire dans ce répertoire, vous en serez informé par un message d’avertissement tant que vous n’êtes pas en mode production.

Une note sur mod_rewrite

Occasionnellement, un nouvel utilisateur peut avoir des problèmes de mod_rewrite. par exemple si la page d’accueil de CakePHP a l’air marrante (pas d’images ou de styles css), cela signifie probablement que mod_rewrite ne fonctionne pas sur votre système. Merci de vous référer à la section suivante sur l’url rewrit-ing pour que votre serveur web fonctionne:

URL Rewriting

Apache et mod_rewrite (et .htaccess)

Alors que CakePHP est construit pour travailler avec mod_rewrite –et habituellement il l’est– nous avons remarqué que certains utilisateurs se battent pour obtenir un bon fonctionnement sur leurs systèmes.

Ici il y a quelques trucs que vous pourriez essayer pour que cela fonctionne correctement. Premièrement, regardez votre fichier httpd.conf (Assurez vous que vous avez éditer le httpd.conf du système plutôt que celui d’un utilisateur- ou le httpd.conf d’un site spécifique).

  1. Assurez-vous qu’un .htaccess est permis et que AllowOverride est défini à All pour le DocumentRoot correct. Vous devriez voir quelque chose comme:

# Chaque répertoire auquel Apache a accès peut être configuré avec

# respect pour lesquels les services et les fonctionnalités sont

# autorisés et/ou désactivés dans ce répertoire (et ses sous-répertoires).

#

# Premièrement, nous configurons "par défault" pour être un ensemble

# très restrictif de fonctionnalités.

#

<Directory />

Options FollowSymLinks

AllowOverride All

#             Order deny,allow

#             Deny from all

</Directory>

  1. Assurez-vous que vous avez chargé correctement mod_rewrite. Vous devriez voir quelque chose comme:

LoadModule rewrite_module libexec/apache2/mod_rewrite.so

Dans la plupart des systèmes, ceux-ci vont être commentés (en étant précédé par un #) par défaut, donc vous aurez juste besoin de retirer les symboles # du début.

Après que vous avez fait des changements, re-démarrez Apache pour être sûr que les paramètres soient actifs.

Vérifiez que vos fichiers .htaccess sont effectivement dans le bon répertoire.

Cela peut arriver pendant la copie parce que certains systèmes d’exploitation traitent les fichiers qui commencent par ‘.’ en caché et du coup ne les voient pas pour les copier.

  1. Assurez-vous que votre copie de CakePHP vient de la section des téléchargements du site de notre dépôt GIT, et a été dézippé correctement en vérifiant les fichiers .htaccess.

Le répertoire root de Cake (a besoin d’être copié dans votre document, cela redirige tout vers votre app Cake) :

<IfModule mod_rewrite.c> RewriteEngine on

RewriteRule      ^ $ app/webroot/           [L]

RewriteRule      (.*) app/webroot/ $ 1 [L]

</IfModule>

Le répertoire app de Cake (sera copié dans le répertoire supérieur de votre application avec Bake) :

CakePHP Cookbook Documentation, Version 2.x                           

                <IfModule mod_rewrite.c> RewriteEngine on

RewriteRule      ^ $          webroot/            [L]         

                RewriteRule      (.*) webroot/ $ 1            [L]

</IfModule>    

Le répertoire webroot de Cake (sera copié dans le webroot de votre application avec Bake) :

Si votre site Cakephp a toujours des problèmes avec mod_rewrite, essayez de modifier les paramètres pour les virtualhosts. Si vous êtes sur ubuntu, modifiez le fichier /etc/apache2/sites-available/default (l’endroit dépend de la distribution). Dans ce fichier, assurez-vous que AllowOverride None a changé en AllowOverride All, donc vous avez:

<Directory />

Options FollowSymLinks

AllowOverride All

</Directory>

<Directory /var/www>

Options Indexes FollowSymLinks MultiViews

AllowOverride All

Order Allow,Deny

Allow from all

</Directory>

Si vous êtes sur Mac OSX, une autre solution est d’utiliser l’outil virtualhostx pour faire un hôte virtuel pour pointer vers votre dossier.

Pour beaucoup de services d’hébergement (GoDaddy, 1and1), votre serveur web est en fait déjà dis¬tribué à partir d’un répertoire utilisateur qui utilise déjà mod_rewrite. Si vous installez CakePHP dans un répertoire utilisateur (http ://exemple.com/~username/cakephp/), ou toute autre structure d’URL qui utilise déjà mod_rewrite, vous aurez besoin d’ajouter les requêtes (statements) RewriteBase aux fichiers .htaccess que CakePHP utilise (/.htaccess, /app/.htaccess, /app/webroot/.htaccess).

Ceci peut être ajouté à la même section avec la directive RewriteEngine, donc par exemple, votre fichier .htaccess dans webroot ressemblerait à ceci :

Les détails de ces changements dépendront de votre configuration, et pourront inclure des choses supplémentaires qui ne sont pas liées à CakePHP. Merci de vous renseigner sur la documentation en ligne d’Apache pour plus d’informations.

CakePHP Cookbook Documentation, Version 2.x

  1. (Optionel) Pour améliorer la configuration de production, vous devriez empêcher les assets invalides d’être parsés par CakePHP. Modifier votre webroot .htaccess pour quelque chose comme:

Ce qui est au-dessus va simplement empêcher les assets incorrects d’être envoyés à index.php et à la place d’afficher la page 404 de votre serveur web.

De plus, vous pouvez créer une page HTML 404 correspondante, ou utiliser la page 404 de CakePHP intégrée en ajoutant une directive ErrorDocument :

ErrorDocument 404 /404-not-found

De belles URLs sur nginx

nginx est un serveur populaire qui, comme Lighttpd, utilise moins de ressources système. Son inconvénient est qu’il ne fait pas usage de fichiers .htaccess comme Apache et Lighttpd, il est donc nécessaire de créer les URLs réécrites dans la configuration du site disponibles. selon votre configuration, vous devrez modifier cela, mais à tout le moins, vous aurez besoin de PHP fonctionnant comme une instance FastCGI.

fastcgi_index    index.php;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

}

}

Rewrites d’URL sur IIS7 (serveurs Windows)

IIS7 ne supporte pas nativement les fichiers .htaccess. Bien qu’il existe des add-ons qui peuvent ajouter ce support, vous pouvez aussi importer les règles des .htaccess dans IIS pour utiliser les rewrites natifs de CakePHP. Pour ce faire, suivez ces étapes :

  1. Créez un nouveau fichier dans votre dossier CakePHP, appelé web.config.
  2. Utilisez Notepad ou tout autre éditeur XML-safe, copiez le code suivant dans votre nouveau fichier web.config...

<?xml version="1.0" encoding="UTF-8"?>

<configuration>

<system.webServer>

<rewrite>

<rules>

<rule name="Rewrite requests to test.php" stopProcessing="true"     >

<match url="^test.php(.*)$" ignoreCase="false" />

<action type="Rewrite" url="app/webroot/test.php{R:1}" />

</rule>

<rule name="Exclude direct access to app/webroot/*" stopProcessing="true">



<match url="^app/webroot/(.*)$" ignoreCase="false" />

<action type="None" />

</rule>

<rule name="Rewrite routed access to assets (img, css, files, js, favicon)

<match url="^(img|css|files|js|favicon.ico)(.*)$" />

<action type="Rewrite" url="app/webroot/{R:1}{R:2}" appendQueryString=

</rule>

<rule name="Rewrite requested file/folder to index.php" stopProcessing="tr

<match url="^(.*)$" ignoreCase="false" />

<action type="Rewrite" url="index.php" appendQueryString="true" />

</rule>

</rules>

</rewrite>

</system.webServer>

</configuration>

Une fois que le fichier web.config est créé avec les bonnes règles de réécriture des liens de IIS, les liens CakePHP, les CSS, les JS, et le reroutage devraient fonctionner correctement.

Je ne veux / ne peux utiliser l’URL rewriting

Si vous ne voulez ou ne pouvez pas utiliser l’URL rewriting sur votre serveur web, référez-vous à la section core configuration.

Maintenant continuez sur Blog Tutoriel - Ajouter la logique pour commencer à construire votre première application CakePHP.

Blog Tutoriel - Ajouter la logique

Créer un model Post

La classe Model est le pain quotidien des applications CakePHP. En créant un model CakePHP qui interagira avec notre base de données, nous aurons mis en place les fondations nécessaires pour faire plus tard nos opérations de lecture, d’insertion, d’édition et de suppression.

Les fichiers des classes Model de CakePHP se trouvent dans /app/Model, et le fichier que nous allons créer maintenant sera enregistré dans /app/Model/Post.php. Le fichier complet devrait ressembler à ceci class Post extends AppModel { }

La convention de nommage est vraiment très importante dans CakePHP. En nommant notre model Post, CakePHP peut automatiquement déduire que ce model sera utilisé dans le controller PostsController, et sera lié à la table posts de la base de données.

Note : CakePHP créera dynamiquement un objet model pour vous, s’il ne trouve pas le fichier correspondant dans /app/Model. Cela veut aussi dire que si vous n’avez pas nommé correctement votre fichier (par ex. post.php ou posts.php). CakePHP ne reconnaîtra pas votre configuration et utilisera ses objets model par défaut.

Pour plus d’informations sur les models, comme les préfixes des tables, les callbacks, et la validation, con¬sultez le chapitre Models (Modèles) du manuel.

Créer un controller Posts

Nous allons maintenant créer un controller pour nos posts. Le controller est l’endroit où s’exécutera toute la logique métier pour l’intéraction du processus de post. En un mot, c’est l’endroit où vous jouerez avec les models et où les tâches liées aux posts s’exécutent. Nous placerons ce nouveau controller dans un fichier ap¬pelé PostsController.php à l’intérieur du dossier /app/Controller. Voici à quoi devrait ressem¬bler le controller de base

class PostsController extends AppController { public $helpers = array(’Html’, ’Form’); }

Maintenant, ajoutons une action à notre controller. Les actions représentent souvent une simple fonction ou une interface dans une application. Par exemple, quand les utilisateurs requêtent www.exemple.com/posts/index (qui est également la même chose que www.exemple.com/posts/), ils pour¬raient s’attendre à voir une liste de posts. Le code pour cette action devrait ressembler à quelque chose comme ça :

class PostsController extends AppController { public $helpers = array(’Html’, ’Form’);

public function index() {

$this->set(’posts’, $this->Post->find(’all’));

}

}

Laissez-moi vous expliquer un peu cette action. En définissant la fonction index() dans notre PostsController, les utilisateurs peuvent maintenant accéder à cette logique en demandant www.exemple.com/posts/index. De la même façon, si nous devions définir une fonction appelée foobar(), les utilisateurs pourrait y accéder en demandant www.exemple.com/posts/foobar.

Warning : Vous pourriez être tenté de nommer vos controllers et vos actions d’une certaine manière pour obtenir une certaine URL. Résistez à cette tentation. Suivez les conventions CakePHP (le nom des controllers au pluriel, etc.) et nommez vos actions de façon lisible et compréhensible. Vous pouvez lier les URLs à votre code en utilisant ce qu’on appelle des “routes”, on le verra plus tard.

La seule instruction que cette action utilise est set(), pour transmettre les données du controller à la vue (que nous créerons à la prochaine étape). La ligne définit la variable de vue appelée ‘posts’ qui est égale à la valeur de retour de la méthode find(’all’) du model Post. Notre model Post est automatiquement disponible via $this->Post, parce que nous avons suivi les conventions de nommage de Cake.

Pour en apprendre plus sur les controllers de Cake, consultez le chapitre Controllers (Contrôleurs). Créer les Vues des Posts

Maintenant que nous avons nos données en provenance du model, ainsi que la logique applicative et les flux définis par notre controller, nous allons créer une vue pour l’action “index” que nous avons créé ci-dessus.

Les vues de Cake sont juste des fragments de présentation “assaisonnée”, qui s’intègrent au sein d’un layout applicatif. Pour la plupart des applications, elles sont un mélange de HTML et PHP, mais les vues peuvent aussi être constituées de XML, CSV ou même de données binaires.

Les Layouts sont du code de présentation, encapsulé autour d’une vue, ils peuvent être définis et inter-changés, mais pour le moment, utilisons juste celui par défaut.

Vous souvenez-vous, dans la dernière section, comment nous avions assigné la variable ‘posts’ à la vue en utilisant la méthode set() ? Cela devrait transmettre les données à la vue qui ressemblerait à quelque chose comme ça :

// print_r($posts) sort:

Array

                (              [0] => Array (    

                )              [Post] => Array

(

[id] => 1

[title] => Le titre

[body] => Voici le contenu du post.

[created] => 2008-02-13 18:34:55

[modified] =>

)

)

[1]          => Array

(

[Post] => Array

(

[id] => 2

[title] => Encore un titre

[body] => Et le contenu du post qui suit.

[created] => 2008-02-13 18:34:56

[modified] =>

)

)

[2]          => Array

(

[Post] => Array

(

[id] => 3

[title] => Le retour du titre

[body] => C ’ est tr è s excitant, non ?

[created] => 2008-02-13 18:34:57

[modified] =>

)

)             

Les fichiers des vues de Cake sont stockés dans /app/views à l’intérieur d’un dossier dont le nom cor¬respond à celui du controller (nous aurons à créer un dossier appelé ‘posts’ dans ce cas). Pour mettre en forme les données de ces posts dans un joli tableau, le code de notre vue devrait ressembler à quelque chose comme cela:

<!-- File: /app/View/Posts/index.ctp -->

<h1>Blog posts</h1> <table>

<tr>

<th>Id</th>

<th>Title</th> <th>Created</th> </tr>

<!-- Here is where we loop through our $posts array, printing out post info -->

Blog Tutoriel - Ajouter la logique             11

CakePHP Cookbook Documentation, Version 2.x

<?php foreach ($posts as $post): ?>

<tr>

<td><?php echo $post[’Post’][’id’]; ?></td> <td>

<?php echo $this->Html->link($post[’Post’][’title’],

array(’controller’ => ’posts’, ’action’ => ’view’, $post[’Post’][’id’])); ?>



</td>

<td><?php echo $post[’Post’][’created’]; ?></td>

</tr>

<?php endforeach; ?>

<?php unset($post); ?>

</table>

Bien entendu, cela donnera quelque chose de simple.

Vous avez sans doute remarqué l’utilisation d’un objet appelé $this->Html. C’est une instance de la classe CakePHP HtmlHelper. CakePHP est livré avec un ensemble de “helpers” (des assistants) pour les vues, qui réalisent en un clin d’oeil des choses comme le “linking” (mettre les liens dans un texte), l’affichage des formulaires, du JavaScript et de l’Ajax. Vous pouvez en apprendre plus sur la manière de les utiliser dans le chapitre Helpers (Assistants), mais ce qu’il est important de noter ici, c’est que la méthode link() génèrera un lien HTML à partir d’un titre (le premier paramètre) et d’une URL (le second paramètre).

Lorsque vous indiquez des URLs dans Cake, il est recommandé d’utiliser les tableaux. Ceci est expliqué dans le chapitre des Routes. Utilisez les tableaux dans les URLs, vous permet de tirer profit des capac¬ités de CakePHP à ré-inverser les routes. Vous pouvez aussi utiliser les URLs relatives depuis la base de l’application comme suit /controller/action/param1/param2.

A ce stade, vous devriez être en mesure de pointer votre navigateur sur la page http ://www.exemple.com/posts/index. Vous devriez voir votre vue, correctement formatée avec le titre et le tableau listant les posts.

Si vous avez essayé de cliquer sur l’un des liens que nous avons créés dans cette vue (le lien sur le titre d’un post mène à l’URL : /posts/view/un—id—quelconque), vous avez sûrement été informé par CakePHP que l’action n’a pas encore été définie. Si vous n’avez pas été informé, soit quelque chose s’est mal passé, soit en fait vous aviez déjà défini l’action, auquel cas vous êtes vraiment sournois! Sinon, nous allons la créer sans plus tarder dans le Controller Posts

class PostsController extends AppController { public $helpers = array(’Html’, ’Form’);

public function index() {

$this->set(’posts’, $this->Post->find(’all’));

}

public function view($id = null) {

if (!$id) {

throw new NotFoundException(_(’Invalid post’));

}

$post = $this->Post->findById($id); if (!$post) {

throw new NotFoundException(_(’Invalid post’));

}

12           Chapitre 1. Pour Commencer

$this->set(’post’, $post);

}

}

L’appel de set() devrait vous être familier. Notez que nous utilisons read() plutôt que find(’all’) parce que nous voulons seulement récupérer les informations d’un seul post.

Notez que notre action “view” prend un paramètre : l’ID du post que nous aimerions voir. Ce paramètre est transmis à l’action grâce à l’URL demandée. Si un utilisateur demande /posts/view/3, alors la valeur ‘3’ est transmise à la variable $id.

Nous faisons aussi une petite vérification d’erreurs pour nous assurer qu’un utilisateur accède bien à l’en-regsitrement. Si un utilisateur requête /posts/view, nous lancerons un NotFoundException et lais¬serons le Gestionnaire d’Erreur de CakePHP ErrorHandler prendre le dessus. Nous executons aussi une vérification similaire pour nous assurer que l’utilisateur a accède à un enregistrement qui existe.

Maintenant, créons la vue pour notre nouvelle action “view” et plaçons-la dans /app/View/Posts/view.ctp.

<!-- Fichier : /app/View/Posts/view.ctp -->

<h1><?php echo h($post[’Post’][’title’]); ?></h1>

<p><small>Créé le : <?php echo $post[’Post’][’created’]; ?></small></p> <p><?php echo h($post[’Post’][’body’]); ?></p>

Vérifiez que cela fonctionne en testant les liens de la page /posts/index ou en affichant manuellement un post via /posts/view/1.

Ajouter des Posts

Lire depuis la base de données et nous afficher les posts est un bon début, mais lançons-nous dans l’ajout de nouveaux posts.

Premièrement, commençons par créer une action add() dans le PostsController :

class PostsController extends AppController { public $helpers = array(’Html’, ’Form’); public $components = array(’Session’);

public function index() {

$this->set(’posts’, $this->Post->find(’all’));

}

public function view($id) {

if (!$id) {

throw new NotFoundException(_(’Invalid post’));

}

$post = $this->Post->findById($id); if (!$post) {

Valider les données

Cake place la barre très haute pour briser la monotonie de la validation des champs de formulaires. Tout le monde déteste le dévelopement de formulaires interminables et leurs routines de validations. Cake rend tout cela plus facile et plus rapide.

Pour tirer profit des fonctionnalités de validation, vous devez utiliser le helper “Form” (FormHelper) dans vos vues. FormHelper est disponible par défaut dans toutes les vues avec la variables $this->Form.

Voici le code de notre vue “add” (ajout)

<!-- Fichier : /app/View/Posts/add.ctp -->

<h1>Ajouter un post</h1>

<?php

echo $this->Form->create(’Post’);

echo $this->Form->input(’title’);

echo $this->Form->input(’body’, array(’rows’ => ’3’));

echo $this->Form->end(’Sauvegarder le post’);

?>

Nous utilisons ici le FormHelper pour générer la balise d’ouverture d’une formulaire HTML. Voici le code HTML généré par $this->Form->create() :

.. code-block:: html

<form id=”PostAddForm” method=”post” action=”/posts/add”>

Si create() est appelée sans aucun paramètre, Cake suppose que vous construisez un formulaire qui envoie les données en POST à l’action add() (ou edit() quand id est dans les données du formulaire) du controller actuel.

La méthode $this->Form->input() est utilisée pour créer des élements de formulaire du même nom. Le premier paramètre dit à CakePHP à quels champs ils correspondent et le second paramètre vous permet de spécifier un large éventail d’options - dans ce cas, le nombre de lignes du textarea. Il y a un peu d’intro-spection et “d’automagie” ici: input() affichera différents éléments de formulaire selon le champ spécifié du model.

L’appel de la méthode $this->Form->end() génère un bouton de soumission et ajoute la balise de fermeture du formulaire. Si une chaîne de caractères est passée comme premier paramètre de la méthode end(), le helper “Form” affichera un bouton de soumission dont le nom correspond à celle-ci. Encore une fois, référez-vous au chapitre Helpers (Assistants) pour en savoir plus sur les helpers.

A présent, revenons en arrière et modifions notre vue /app/View/Posts/index.ctp pour ajouter un lien “Ajouter un post”. Ajoutez la ligne suivante avant <table>

<?php echo $this->Html->link(

’Ajouter un Post’,

array(’controller’ => ’posts’, ’action’ => ’add’) ); ?>



246