Cours CAKEPHP

Cours complet pour débuter avec CakePHP


Télécharger Cours complet pour débuter avec CakePHP

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

Télécharger aussi :


Cours complet pour débuter avec CakePHP

...

CakePHP est conçu pour faciliter et simplifier les tâches classiques du développement web. En fournissant une boite à outil tout-en-un pour vous aider à démarrer, les différentes parties de CakePHP fonctionnent aussi bien ensemble que séparément.

Le but de cette présentation est d’introduire les concepts généraux de CakePHP, et de vous donner un aperçu rapide de la façon dont ces concepts sont mis en œuvre dans CakePHP. Si vous êtes impatient de démarrer un projet, vous pouvez commencer avec le tutoriel, ou vous plonger dans la documentation.

Conventions plutôt que Configuration

CakePHP fournit une structure organisationnelle de base qui comprend les noms de classes, les noms de fichiers,   les noms de table de base de données, et d’autres conventions. Même si les conventions peuvent paraître longues à apprendre, en suivant les conventions offertes par CakePHP, vous pouvez éviter les configurations inutiles et construire une structure d’application uniforme ce qui facilite le travail quand vous travaillez sur de multiples projets. Le chapitre sur les conventions couvre les différentes conventions utilisées par CakePHP.

La Couche Model (Modèle)

La couche Model représente la partie de l’application qui exécute la logique applicative. Elle est responsable de récu- pérer les données et de les convertir selon des concepts significatifs pour votre application. Cela inclut le traitement, la validation, l’association et beaucoup d’autres tâches concernant la manipulation des données.

Dans le cas d’un réseau social, la couche Model s’occuperait des tâches telles que sauvegarder les données utilisateur, sauvegarder les associations d’amis, enregistrer et récupérer les photos des utilisateurs, trouver des suggestions de nouveaux amis, etc . . . Tandis que les objets Models seraient « Friend », « User », « Comment », « Photo ». Si nous voulions charger des données depuis notre table users, nous pourrions faire :

Vous remarquerez peut-être que nous n’avons pas eu à écrire de code avant que nous puissions commencer à travailler avec nos données. En utilisant les conventions, CakePHP utilisera des classes standards pour les classes table et entity qui n’ont pas encore été définies.

Si nous voulions créer un nouvel utilisateur et l’enregistrer (avec validation), nous ferions ceci :

La Couche View (Vue)

La View retourne une présentation des données modélisées. Etant séparée des objets Model, elle est responsable de l’utilisation des informations dont elle dispose pour produire n’importe qu’elle interface de présentation nécessaire à votre application.

Par exemple, la view pourrait utiliser les données du model pour afficher un template de vue HTML les contenant ou un résultat au format XML pour que d’autres l’utilisent :

La couche View fournit un certain nombre d’extensions tels que les Templates, les Elements et les Cells pour vous permettre de réutiliser votre logique de présentation.

La couche View n’est pas seulement limitée au HTML ou à la représentation en texte de données. Elle peut aussi être utilisée pour offrir une grande variété de formats tels que JSON, XML et grâce à une architecture modulable tout autre format dont vous auriez besoin, comme CSV par exemple.

La Couche Controller  (Contrôleur)

La couche Controller gère les requêtes des utilisateurs. Elle est responsable de retourner une réponse avec l’aide mutuelle des couches Model et View.

Les Controllers peuvent être imaginés comme des managers qui ont pour mission que toutes les ressources nécessaires pour accomplir une tâche soient déléguées aux bonnes personnes. Il attend des requêtes des clients, vérifie leur validité selon l’authentification et les règles d’autorisation, délègue la récupération et le traitement des données à la couche Model, puis sélectionne les types de présentation acceptés par le client pour finalement déléguer le processus de rendu à la couche View. Un exemple de controller d’enregistrement d’utilisateur serait :

Notez que nous n’avons jamais explicitement rendu de view. Les conventions de CakePHP prendront soin de sélec- tionner la bonne view et de la rendre avec les données préparées avec set().

Cycle de Requête CakePHP

Maintenant que vous êtes familier avec les différentes couches de CakePHP, voyons comment fonctionne le cycle d’une requête CakePHP :

Le cycle d’une requête CakePHP typique débute avec une requête utilisateur qui demande une page ou une ressource de votre application. À haut niveau chaque requête passe par les étapes suivantes :

1.Les règles de réécriture de votre serveur web dirigent la requête vers webroot/index.php. 2.Votre Application est chargée et liée à un HttpServer.

  1. Le middleware de votre application est initialisé.
  2. Une requête et une réponse sont dispatchées à travers le Middleware PSR-7 utilisé par votre application. Typi- quement, il inclut l’interception d’erreurs et le routing.
  3. Si aucune réponse n’est retournée à partir du middleware et que la requête contient des informations de routing, un controller et une action sont sélectionnés.
  4. L’action du controller est appelée et le controller interagit avec les Models et Components nécessaires.
  5. Le controller délègue la création de la response à la View pour générer le résultat obtenu à partir des données du model.
  6. Le View utilise les Helpers et les Cells pour générer l’en-tête et le corps de la réponse. 9.La réponse est de nouveau envoyée à travers le /controllers/middleware.
  7. HttpServer émet la réponse au serveur web.

Que le Début

Espérons que ce bref aperçu ait éveillé votre intérêt. Quelques autres grandes fonctionnalités de CakePHP sont :

—Un framework de cache qui s’intègre à Memcached, Redis et d’autres moteurs de cache.

—Un outil de génération de code puissant pour partir sur les chapeaux de roue.

—Un framework de tests intégré pour vous assurer que votre code fonctionne correctement.

Les prochaines étapes évidentes sont de télécharger CakePHP, lire le tutoriel et construire

Lectures Complémentaires

Où obtenir de l’aide

Le Site Officiel de CakePHP

https://cakephp.org

Le site officiel de CakePHP est toujours un endroit épatant à visiter. Il propose des liens vers des outils fréquemment utilisés par le développeur, des didacticiels vidéo, des possibilités de faire un don et des téléchargements.

Le Cookbook

https://book.cakephp.org

Ce manuel devrait probablement être le premier endroit où vous rendre pour obtenir des réponses. Comme pour beau- coup d’autres projets open source, nous accueillons de nouvelles personnes régulièrement. Faîtes tout votre possible pour répondre à vos questions vous-même dans un premier temps. Les réponses peuvent venir lentement, mais elles resteront longtemps et vous aurez ainsi allégé notre charge de travail en support utilisateur. Le manuel et l’API ont tous deux une version en ligne.

La Boulangerie

https://bakery.cakephp.org

La Boulangerie (Bakery) est une chambre de compensation pour tout ce qui concerne CakePHP. Vous y trouverez des tutoriels, des études de cas et des exemples de code. Lorsque vous serez familiarisés avec CakePHP, connectez-vous pour partager vos connaissances avec la communauté et obtenez en un instant la gloire et la fortune.

L’API

https://api.cakephp.org/

Allez droit au but et atteignez le graal des développeurs, l’API CakePHP (Application Programming Interface) est  la documentation la plus complète sur tous les détails essentiels au fonctionnement interne du framework. C’est une référence directe au code, donc apportez votre chapeau à hélice.

Les Cas de Test

Si vous avez toujours le sentiment que l’information fournie par l’API est insuffisante, regardez le code des cas de test fournis avec CakePHP. Ils peuvent servir d’exemples pratiques pour l’utilisation d’une fonction et de données membres d’une classe :



Le Canal IRC

Canaux IRC sur irc.freenode.net :

—#cakephp– Discussion générale.

—#cakephp-docs– Documentation.

—#cakephp-bakery– Bakery.

—#cakephp-fr– Canal francophone.

Si vous êtes paumé, poussez un hurlement sur le canal IRC de CakePHP. Une personne del’équipe de développement 4 s’y trouve habituellement, en particulier durant les heures du jour pour les utilisateurs d’Amérique du Nord et du Sud. Nous serions ravis de vous écouter, que vous ayez besoin d’un peu d’aide, que vous vouliez trouver des utilisateurs dans votre région ou que vous souhaitiez donner votre nouvelle marque de voiture sportive.

Forum Officiel

Forum Officiel de CakePHP 5

Notre forum officiel où vous pouvez demander de l’aide, suggérer des idées et discuter de CakePHP. C’est l’endroit idéal pour trouver rapidement des réponses et aider les autres. Rejoignez la famille de CakePHP en vous y inscrivant.

Nous sommes de grands fans des conventions plutôt que de la configuration. Bien que cela réclame un peu de temps pour apprendre les conventions de CakePHP, à terme vous gagnerez du temps. En suivant les conventions, vous aurez des fonctionnalités automatiques et vous vous libérerez du cauchemar de la maintenance du suivi des fichiers de confi- guration. Les conventions créent un environnement de développement uniforme, permettant à d’autres développeurs de s’investir dans le code plus.

Les Conventions des Controllers

Les noms des classes de controller sont au pluriel, en CamelCase et se terminent par Controller. UsersController et ArticleCategoriesController sont des exemples respectant cette convention.

les méthodes publiques des controllers sont souvent exposées comme des “actions” accessibles via un navigateur web. Par exemple /users/view correspond à la méthode view() de UsersController sans rien modifier. Les méthodes privées ou protégées ne sont pas accessibles avec le routing.

Considérations concernant les URLs et les Noms des Controllers

Comme vous venez de voir, un controller à mot unique renvoie vers un chemin URL en minuscules. Par exemple,

UsersController (qui serait défini dans le nom de fichier UsersController.php) est accessible à l’adressehttp:

//exemple.com/users.

Alors  que  vous  pouvez  router  des  controllers  qui  ont   plusieurs   mots   de   la   façon   que   vous   sou-   haitez, la convention est que vos URLs soient en minuscules avec des  tirets  en  utilisant  la  classe  DashedRoute, donc /article-categories/view-all est la bonne forme pour accéder à l’action ArticleCategoriesController::viewAll().

Quand vous créez des liens en utilisant this->Html->link(), vous pouvez utiliser les conventions suivantes pour le tableau d’url :

Pour plus d’informations sur les URLs de CakePHP et la gestion des paramètres, allez voir Connecter les Routes.

Conventions des Fichiers et des Noms de Classe

En général, les noms de fichiers correspondent aux noms des classes et suivent les standards PSR-0 et PSR-4 pour l’autoloading (chargement automatique). Voici quelques exemples de noms de classes et de fichiers :

—La classe controller LatestArticlesController devra se trouver dans un fichier nommé LatestArti- clesController.php.

—La classe Component (Composant) MyHandyComponent devra se trouver dans un fichier nommé MyHan- dyComponent.php.

—La classe Table OptionValuesTable devra se trouver dans un fichier nommé OptionValuesTable.php.

—La classe Entity OptionValue devra se trouver dans un fichier nommé OptionValue.php.

—La classe Behavior (Comportement) EspeciallyFunkableBehavior devra se trouver dans un fichier nommé EspeciallyFunkableBehavior.php.

—La classe View (Vue) SuperSimpleView devra se trouver dans un fichier nommé SuperSimpleView.ctp.

—La classe Helper (Assistant) BestEverHelper devra se trouver dans un fichier nommé BestEverHel- per.php.

Chaque fichier sera situé dans le répertoire/namespace approprié dans le dossier de votre application.

Conventions pour les Models et les Bases de Données

Les noms de classe de model sont au pluriel, en CamelCase et finissent par Table. UsersTable, ArticleCategoriesTable et UserFavoritePagesTable en sont des exemples.

Les noms de tables correspondant aux models CakePHP sont au pluriel et utilisent le caractère souligné (un- derscore). Les tables correspondantes aux models mentionnés ci-dessus seront donc respectivement : users, article_categories et user_favorite_pages.

La convention est d’utiliser des mots anglais pour les noms de colonne et de table. Si vous utilisez des mots dans une autre langue, CakePHP ne va pas pouvoir convertir correctement les bonnes inflections (du singulier vers le pluriel et vice-versa). Dans certains cas, si vous souhaitez ajouter vos propres règles pour des mots d’une autre langue,  vous pouvez utiliser la classe utilitaire Cake\Utility\Inflector. En plus de définir ces règles d’inflections personnalisées, cette classe va aussi vous permettre de vérifier que CakePHP comprend votre syntaxe personnalisée pour les mots pluriels et singuliers. Vous pouvez consulter la documentation sur Inflector pour plus d’informations.

Les noms des champs avec deux mots ou plus doivent être avec des underscores comme ici : first_name.

Les clés étrangères des relations hasMany, belongsTo ou hasOne sont reconnues par défaut grâce au nom (singulier) de la table associée, suivi de _id. Donc, si Users hasMany Articles, la table articles se référera à la table users via une clé étrangère user_id. Pour une table avec un nom de plusieurs mots comme article_categories, la clé étrangère sera article_category_id.

Les tables de jointure utilisées dans les relations BelongsToMany entre models doivent être nommées d’après le nom des tables qu’elles unissent ou la commande bake ne fonctionnera pas, dans l’ordre alphabétique (articles_tags plutôt que tags_articles). Dans le cas où vous souhaitez ajouter des données supplémentaires à la table intermé- diaire, vous devrez ajouter un champ id à la table de jointure pour que articles_tags devienne une entity et la table aura au moins les clés article_id, tag_id et id.

En plus de l’utilisation des clés auto-incrémentées en tant que clés primaires, vous voudrez peut-être aussi utiliser des colonnes UUID. CakePHP va créer un UUID unique de 36 caractères (CakeUtilityText::uuid()) à chaque fois que vous sauvegarderez un nouvel enregistrement en utlisant la méthode Table::save().

Conventions des Views

Les fichiers de template de view sont nommés d’après les fonctions du controller qu’elles affichent, sous une forme avec underscores. La fonction viewAll() de la classe ArticlesController cherchera un gabarit de view dans src/Template/Articles/view_all.ctp.

Le schéma classique est src/Template/Controller/nom_de_fonction_avec_underscore.ctp.

En utilisant les conventions CakePHP dans le nommage des différentes parties de votre application, vous gagnerez des fonctionnalités sans les tracas et les affres de la configuration. Voici un exemple récapitulant les conventions abordées :

—Nom de la table de la base de données : « articles »

—Classe Table : ArticlesTable se trouvant dans src/Model/Table/ArticlesTable.php

—Classe Entity : Article se trouvant dans src/Model/Entity/Article.php

—Classe Controller : ArticlesController se trouvant dans src/Controller/ArticlesController.php

—Template de View se trouvant dans src/Template/Articles/index.ctp

En utilisant ces conventions, CakePHP sait qu’une requête de type ... liée à un appel à la fonction index() du Controller ArticlesController, dans lequel le model Articles est automatiquement disponible (et automatiquement lié à la table “articles” dans la base) et rendue dans un fichier. Aucune de ces relations n’a été configurée par rien d’autre que la création des classes et des fichiers dont vous aviez besoin de toute façon.

Maintenant que vous avez été initié aux fondamentaux de CakePHP, vous devriez essayer de dérouler le tutoriel du Blog CakePHP pour voir comment les choses s’articulent.



Structure du dossier de CakePHP

Après avoir téléchargé et extrait l’application CakePHP, voici les fichiers et répertoires que vous devriez voir :

—Le dossier bin contient les exécutables de la console Cake.

—Le dossier config contient les (quelques) fichiers de Configuration que CakePHP utilise. Les détails sur la connexion à la base de données, le bootstrapping, les fichiers de configuration du cœur et consorts doivent être stockés ici.

—Le dossier logs contient normalement vos fichiers de log avec la configuration par défaut des logs.

—Le dossier plugins est l’endroit où sont stockés les Plugins que votre application utilise.

—Le dossier src sera celui vous placerez les fichiers de votre application.

—Le dossier tests est l’endroit où vous mettez les cas de test pour votre application.

—Le dossier tmp est l’endroit où CakePHP stocke les données temporaires. Les données qu’il stocke dépendent de la façon dont vous avez configuré CakePHP mais ce dossier est généralement utilisé pour les stocker les traductions, les descriptions de model et parfois les informations de session.

—Le dossier vendor est l’endroit où CakePHP et d’autres dépendances de l’application vont être installés. Mo- difier ces fichiers est déconseillé car composer écraser vos changements lors du prochain update que vous ferez.

—Le répertoire webroot est la racine publique de votre application. Il contient tous les fichiers que vous souhaitez voir accessibles publiquement.

Assurez-vous que les dossiers tmp et logs existent et qu’ils sont en écriture, autrement la performance de votre application sera sévèrement impactée. En mode debug, CakePHP vous avertira que ces dossiers ne peuvent pas être écrits.

Le Dossier Src

Le répertoire src de CakePHP est l’endroit où vous réaliserez la majorité du développement de votre application. Regardons d’un peu plus près les dossiers à l’intérieur de src.

Controller Contient les controllers et les components de votre application.

Locale Stocke les fichiers pour l’internationalisation.

Model Pour les tables, entity et behaviors de votre application.

Shell Contient les commandes de la console et les tasks de la console pour votre application. Pour plus d’infor- mations, regardez la section Outils de Console, Shells, & Tasks.

Template Les fichiers de présentation se trouvent ici : elements, pages d’erreur, les layouts, et les fichiers de template de vue.

View Les classes de présentation sont placés ici : views, cells, helpers.

CHAPITRE2 Guide de Démarrage Rapide

Le meilleur moyen de tester et d’apprendre CakePHP est de s’assoir et de construire une application simple de gestion de Contenu (CMS).

Tutoriel d’un système de gestion de contenu

Ce tutoriel vous accompagnera dans la création d’une application de type CMS (Content Management System). Pour commencer, nous installerons CakePHP, créerons notre base de données et construirons un système simple de gestion d’articles.

Voici les pré-requis :

  1. Un serveur de base de données. Nous utiliserons MySQL dans ce tutoriel. Vous avez besoin de connaître assez de SQL pour créer une base de données et exécuter quelques requêtes SQL que nous fournirons dans ce tutoriel. CakePHP se chargera de construire les requêtes nécessaires pour votre application. Puisque nous allons utiliser MySQL, assurez-vous que pdo_mysql est bien activé dans PHP.
  2. Les connaissances de base en PHP.

Avant de commencer, assurez-vous que votre version de PHP est à jour :

Vous devez avoir au minimum PHP 5.6.0 installé (en CLI). Votre version serveur de PHP doit au moins être aussi 5.6.0 et, dans l’idéal, devrait également être la même que pour votre version en ligne de commande (CLI).

Récupérer CakePHP

La manière la plus simple d’installer CakePHP est d’utiliser Composer. Composer est une manière simple d’installer CakePHP via votre terminal. Premièrement, vous devez télécharger et installer Composer si vous ne l’avez pas déjà fait. Si vous avez cURL installé, il suffit simplement de lancer la commande suivante :

Ou vous pouvez télécharger composer.phar depuis lesite de Composer 19.

Ensuite, tapez la commande suivante dans votre terminal pour installer le squelette d’application CakePHP dans le dossier cms du dossier courant :

Si vous avez téléchargé et utilisél’Installer de Composer pour Windows 20, tapez la commande suivante dans votre terminal depuis le dossier d’installation (par exemple C :\wamp\www\dev\cakephp3) :

Utiliser Composer a l’avantage d’exécuter automatiquement certaines tâches importantes d’installation, comme définir les bonnes permissions sur les dossiers et créer votre fichier config/app.php.

Il existe d’autres moyens d’installer CakePHP. Si vous ne pouvez pas (ou ne voulez pas) utiliser Composer, rendez- vous dans la section Installation.

Quelque soit la manière de télécharger et installer CakePHP, une fois que la mise en place est terminée, votre dossier d’installation devrait ressembler à ceci :

C’est le bon moment pour en apprendre d’avantage sur le fonctionnement de la structure des dossiers de CakePHP : rendez-vous dans la section Structure du dossier de CakePHP pour en savoir plus.

Vérifier l’installation

Il est possible de vérifier que l’installation est terminée en vous rendant sur la page d’accueil. Avant de faire ça, vous allez devoir lancer le serveur de développement :

Note : Pour Windows, la commande doit être bin\cake server (notez le backslash).

Cela démarrera le serveur embarqué de PHP sur le port 8765. Ouvrez http ://localhost :8765 dans votre navigateur pour voir la page d’accueil. Tous les éléments de la liste devront être validés sauf le point indiquant si CakePHP arrive à se connecter à la base de données. Si d’autres points ne sont pas validés, vous avez peut-être besoin d’installer des extensions PHP supplémentaires ou définir les bonnes permissions sur certains dossiers.

Ensuite, nous allons créer notre base de données et créer notre premier model.

Maintenant que CakePHP est installé, il est temps d’installer la base de données pour notre application CMS. Si vous ne l’avez pas encore fait, créez une base de données vide qui servira pour ce tutoriel, avec le nom de votre choix (par exemple cake_cms). Exécutez ensuite la requête suivante pour créer les premières tables nécessaires au tutoriel :

Vous avez peut-être remarqué que la table articles_tags utilise une clé primaire composée. CakePHP supporte les clés primaires composées presque partout, vous permettant d’avoir des shémas plus simples qui ne nécessitent pas de colonnes id supplémentaires.

Les noms de tables et de colonnes utilisés ne sont pas arbitraires. En utilisant les conventions de nommages de Ca- kePHP, nous allons bénéficier des avantages de CakePHP de manière plus efficace et allons éviter d’avoir trop de configuration à effectuer. Bien que CakePHP soit assez flexible pour supporter presque n’importe quel schéma de base de données, adhérer aux conventions va vous faire gagner du temps.

Configuration de la base de données

Ensuite, disons à CakePHP où est notre base de données et comment nous y connecter. Remplacer les valeurs dans le tableau Datasources.default de votre fichier config/app.php avec celle de votre installation de base de données. Un exemple de configuration complétée ressemblera à ceci :

Une fois que vous avez sauvegardé votre fichier config/app.php, vous devriez voir que CakePHP est capable de se connecter à la base de données sur la page d’accueil de votre projet.

Note : Une copie du fichier de configuration par défaut peut être trouvée dans config/app.default.php.

Création du premier Model

Les models font partie du coeur des applications CakePHP. Ils nous permettent de lire et modifier les données, de construire des relations entre nos données, de valider les données et d’appliquer les règles spécifiques à notre applica- tion. Les models sont les fondations nécessaires pour construire nos actions de controllers et nos templates.



Les models de CakePHP sont composés d’objets Table et Entity. Les objets Table nous permettent d’accéder aux collections d’entities stockées dans une table spécifique. Ils sont stockés dans le dossier src/Model/Table. Le fichier que nous allons créer sera sauvegardé dans src/Model/Table/ArticlesTable.php. Le fichier devra contenir ceci :

Nous y avons attaché le behavior Timestamp qui remplira automatiquement les colonnes created et modified de notre table. En nommant notre objet Table ArticlesTable, CakePHP va utiliser les conventions de nommages pour savoir que notre model va utiliser la table articles. Toujours en utilisant les conventions, il saura que la colonne id est notre clé primaire.

Note : CakePHP créera dynamiquement un objet model s’il n’en trouve pas un qui correspond dans le dossier src/Model/Table. Cela veut dire que si vous faites une erreur lors du nommage du fichier (par exemple articles- table.php ou ArticleTable.php), CakePHP ne reconnaitra pas votre configuration et utilisera ce model généré à la place.

Nous allons également créer une classe Entity pour notre Articles. Les Entities représentent un enregistrement spécifique en base et donnent accès aux données d’une ligne de notre base. Notre Entity sera sauvegardée dans src/Model/Entity/Article.php. Le fichier devra ressembler à ceci :

Notre entity est assez simple pour l’instant et nous y avons seulement défini la propriété _accessible qui permet de contrôler quelles propriétés peuvent être modifiées via Assignement de Masse.

Pour l’instant, nous ne pouvons pas faire grande chose avec notre model. Pour intéragir avec notre model, nous allons ensuite créer nos premiers Controller et Template.

Maintenant que notre model est créé, nous avons besoin d’un controller pour nos articles. Dans CakePHP, les control- lers se chargent de gérer les requêtes HTTP et exécutent la logique métier des méthodes des models pour préparer une réponse. Nous placerons le code de ce controller dans un nouveau fichier ArticlesController.php, dans le dossier src/Controller. La base du controller ressemblera à ceci :

Ajoutons maintenant une action à notre controller. Les actions sont les méthodes des controllers qui sont connec- tées aux routes. Par exemple, quand un utilisateur appelle la page www.example.com/articles/index (ce qui est      la même chose qu’appeler www.example.com/articles), CakePHP appelera la méthode index de votre controller ArticlesController. Cette méthode devra à son tour faire appel à la couche Model et préparer une réponse en faisant le rendu d’un Template via la couche de View. Le code de notre action index sera le suivant :

Maintenant que nous avons une méthode index() dans notre ArticlesController, les utilisateurs peuvent maintenant y accéder via www.example.com/articles/index. De la même manière, si nous définissions une méthode foobar(), les utilisateurs pourraient y accéder via www.example.com/articles/foobar. Vous pourriez être tenté de nommer vos controllers et vos actions afin d’obtenir des URL spécifiques. Cependant, ceci est déconseillé. Vous devriez plutôt suivre les Conventions de CakePHP et créer des noms d’actions lisibles ayant un sens pour votre appli- cation. Vous pouvez ensuite utiliser le Routing pour obtenir les URLs que vous souhaitez et les connecter aux actions que vous avez créées.

Notre action est très simple. Elle récupère un jeu d’articles paginés dans la base de données en utilisant l’objet model Articles qui est chargé automatiquement via les conventions de nommage. Elle utilise ensuite la méthode set() pour passer les articles récupérés au Template (que nous créerons par la suite). CakePHP va automatiquement rendre le Template une fois que notre action de Controller sera entièrement exécutée.

Création du Template de liste des Articles

Maintenant que notre controller récupère les données depuis le model et qu’il prépare le contexte pour la view, créons le template pour notre action index.

Les templates de view de CakePHP sont des morceaux de PHP qui sont insérés dans le layout de votre application. Bien que nous créerons du HTML ici, les Views peuvent générer du JSON, du CSV ou même des fichiers binaires comme des PDFs.

Un layout est le code de présentation qui englobe la view d’une action. Les fichiers de layout contiennent les éléments communs comme les headers, les footers et les éléments de navigation. Votre application peut très bien avoir plusieurs layouts et vous pouvez passer de l’un à l’autre. Mais pour le moment, utilisons seulement le layout par défaut.

Les fichiers de template de CakePHP sont stockés dans src/Template et dans un dossier au nom du controller auquel ils sont attachés. Nous devons donc créer un dossier nommé “Articles” dans notre cas. Ajouter le code suivant dans ce fichier :

Dans la précédente section, nous avons assigné la variable “articles” à la view en utilisant la méthode set(). Les variables passées à la view sont disponibles dans les templates de view comme des « variables locales », comme nous l’avons fait ci-dessus.

Vous avez peut-être remarqué que nous utilisons un objet appelé $this->Html. C’est une instance du HtmlHelper. CakePHP inclut plusieurs helpers de view qui rendent les tâches comme créer des liens, des formulaires et des éléments de paginations très faciles. Vous pouvez en apprendre plus à propos des Helpers (Assistants) dans le chapitre de la documentation qui leur est consacré, mais le plus important ici est la méthode link(), qui générera un lien HTML avec le texte fourni (le premier paramètre) et l’URL (le second paramètre).

Quand vous spécifiez des URLs dans CakePHP, il est recommandé d’utiliser des tableaux ou des routes nommées. Ces syntaxes vous permettent de bénéficier du reverse routing fourni par CakePHP.

A partir de maintenant, si vous accédez à http ://localhost :8765/articles/index, vous devriez voir votre view qui liste les articles avec leur titre et leur lien.

Création de l’action View

Si vous cliquez sur le lien d’un article dans la page qui liste nos articles, vous tombez sur une page d’erreur vous indiquant que l’action n’a pas été implémentée. Vous pouvez corrigez cette erreur en créant l’action manquante cor- respondante :

Bien que cette action soit simple, nous avons utilisez quelques-unes des fonctionnalités de CakePHP. Nous com- mençons par utiliser la méthode findBySlug() qui est un finder dynamique. Cette méthode nous permet de créer une requête basique qui permet de récupérer des articles par un « slug » donné. Nous utilisons ensuite la méthode firstOrFail() qui nous permet de récupérer le premier enregistrement ou lancera une NotFoundException si aucun article correspondant n’est trouvé.

Notre action attend un paramètre $slug, mais d’où vient-il ? Si un utilisateur requête /articles/view/ first-post, alors la valeur “first-post” sera passé à $slug par la couche de routing et de dispatching de CakePHP. Si nous rechargeons notre navigateur, nous aurons une nouvelle erreur, nous indiquant qu’il manque un template de View.

Création du template View

Créons le template de view pour notre action « view » dans src/Template/Articles/view.ctp.

Vous pouvez vérifier que tout fonctionne en essayant de cliquer sur un lien de /articles/index ou en vous rendant manuellement sur une URL de la forme /articles/view/first-post.



466