CakePhp

Version 7 (Jean-Michel Glorian, 02/19/2018 10:19 pm)

1 1 Jean-Michel Glorian
h1. CakePhp
2 2 Jean-Michel Glorian
3 3 Jean-Michel Glorian
{{>toc}}
4 4 Jean-Michel Glorian
5 2 Jean-Michel Glorian
h2. Liens
6 2 Jean-Michel Glorian
7 2 Jean-Michel Glorian
* ROADMAP: https://github.com/cakephp/cakephp/wiki
8 2 Jean-Michel Glorian
* *Migrations* plugin: http://book.cakephp.org/3.0/fr/migrations.html
9 2 Jean-Michel Glorian
* *CONVENTIONS*: https://book.cakephp.org/3.0/fr/intro/conventions.html
10 2 Jean-Michel Glorian
* Déploiement : https://book.cakephp.org/3.0/fr/deployment.html
11 2 Jean-Michel Glorian
* Forum cakephp: http://discourse.cakephp.org
12 2 Jean-Michel Glorian
* Debug Kit : https://book.cakephp.org/3.0/fr/debug-kit.html
13 2 Jean-Michel Glorian
* Quickstart tutorial: http://book.cakephp.org/3.0/en/quickstart.html
14 2 Jean-Michel Glorian
* Bookmarker tutorial: https://github.com/cakephp/bookmarker-tutorial
15 2 Jean-Michel Glorian
* Cakephp CRUD: https://github.com/FriendsOfCake/crud
16 2 Jean-Michel Glorian
* Plugin Chronos pour gérer les dates plus facilement : https://book.cakephp.org/3.0/fr/chronos.html
17 3 Jean-Michel Glorian
18 3 Jean-Michel Glorian
h2. CONVENTIONS CAKEPHP
19 3 Jean-Michel Glorian
20 3 Jean-Michel Glorian
https://book.cakephp.org/3.0/fr/intro/conventions.html
21 3 Jean-Michel Glorian
22 3 Jean-Michel Glorian
23 5 Jean-Michel Glorian
h3. SYNTHÈSE GÉNÉRALE
24 3 Jean-Michel Glorian
25 3 Jean-Michel Glorian
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 :
26 3 Jean-Michel Glorian
27 3 Jean-Michel Glorian
<pre>
28 3 Jean-Michel Glorian
    Nom de la table de la base de données: “articles”
29 3 Jean-Michel Glorian
    Classe Table: ArticlesTable se trouvant dans src/Model/Table/ArticlesTable.php
30 3 Jean-Michel Glorian
    Classe Entity: Article se trouvant dans src/Model/Entity/Article.php
31 3 Jean-Michel Glorian
    Classe Controller: ArticlesController se trouvant dans src/Controller/ArticlesController.php
32 3 Jean-Michel Glorian
    Template de View se trouvant dans src/Template/Articles/index.ctp
33 3 Jean-Michel Glorian
</pre>
34 3 Jean-Michel Glorian
35 3 Jean-Michel Glorian
En utilisant ces conventions, CakePHP sait qu’une requête de type http://exemple.com/articles/ sera 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.
36 3 Jean-Michel Glorian
37 3 Jean-Michel Glorian
38 5 Jean-Michel Glorian
h3. Controleurs
39 3 Jean-Michel Glorian
40 3 Jean-Michel Glorian
noms des classes de controller sont au pluriel, en CamelCase et se terminent par Controller. UsersController et ArticleCategoriesController sont des exemples respectant cette convention
41 3 Jean-Michel Glorian
42 3 Jean-Michel Glorian
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
43 3 Jean-Michel Glorian
44 3 Jean-Michel Glorian
UsersController (qui serait défini dans le nom de fichier UsersController.php) est accessible à l’adresse http://exemple.com/users.
45 3 Jean-Michel Glorian
46 3 Jean-Michel Glorian
/article-categories/view-all est la bonne forme pour accéder à l’action ArticleCategoriesController::viewAll()
47 3 Jean-Michel Glorian
48 3 Jean-Michel Glorian
Quand vous créez des liens en utilisant this->Html->link(), vous pouvez utiliser les conventions suivantes pour le tableau d’url:
49 3 Jean-Michel Glorian
50 3 Jean-Michel Glorian
<pre>
51 3 Jean-Michel Glorian
$this->Html->link('link-title', [
52 3 Jean-Michel Glorian
    'prefix' => 'MyPrefix' // CamelCased
53 3 Jean-Michel Glorian
    'plugin' => 'MyPlugin', // CamelCased
54 3 Jean-Michel Glorian
    'controller' => 'ControllerName', // CamelCased
55 3 Jean-Michel Glorian
    'action' => 'actionName' // camelBacked
56 3 Jean-Michel Glorian
]
57 1 Jean-Michel Glorian
</pre>
58 3 Jean-Michel Glorian
59 5 Jean-Michel Glorian
h3. Fichiers et noms de Classe
60 3 Jean-Michel Glorian
61 3 Jean-Michel Glorian
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). 
62 3 Jean-Michel Glorian
Voici quelques exemples de noms de classes et de fichiers:
63 3 Jean-Michel Glorian
64 3 Jean-Michel Glorian
<pre>
65 3 Jean-Michel Glorian
    La classe controller LatestArticlesController devra se trouver dans un fichier nommé LatestArticlesController.php.
66 3 Jean-Michel Glorian
    La classe Component (Composant) MyHandyComponent devra se trouver dans un fichier nommé MyHandyComponent.php.
67 3 Jean-Michel Glorian
    La classe Table OptionValuesTable devra se trouver dans un fichier nommé OptionValuesTable.php.
68 3 Jean-Michel Glorian
    La classe Entity OptionValue devra se trouver dans un fichier nommé OptionValue.php.
69 3 Jean-Michel Glorian
    La classe Behavior (Comportement) EspeciallyFunkableBehavior devra se trouver dans un fichier nommé EspeciallyFunkableBehavior.php.
70 3 Jean-Michel Glorian
    La classe View (Vue) SuperSimpleView devra se trouver dans un fichier nommé SuperSimpleView.ctp.
71 3 Jean-Michel Glorian
    La classe Helper (Assistant) BestEverHelper devra se trouver dans un fichier nommé BestEverHelper.php.
72 1 Jean-Michel Glorian
</pre>
73 3 Jean-Michel Glorian
74 3 Jean-Michel Glorian
Chaque fichier sera situé dans le répertoire/namespace approprié dans le dossier de votre application.
75 3 Jean-Michel Glorian
76 5 Jean-Michel Glorian
h3. Modèles et Bases de Données
77 3 Jean-Michel Glorian
78 3 Jean-Michel Glorian
Les noms de classe de *model* sont au *pluriel, en CamelCase et finissent par Table*. *UsersTable, ArticleCategoriesTable et UserFavoritePagesTable* en sont des exemples.
79 3 Jean-Michel Glorian
80 3 Jean-Michel Glorian
Les noms de *tables* correspondant aux models CakePHP sont au *pluriel et utilisent le caractère souligné* (underscore). Les tables correspondantes aux models mentionnés ci-dessus seront donc respectivement : *users, article_categories et user_favorite_pages*.
81 3 Jean-Michel Glorian
82 3 Jean-Michel Glorian
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*.
83 3 Jean-Michel Glorian
84 3 Jean-Michel Glorian
Les *noms des champs avec deux mots ou plus* doivent être avec des *underscores* comme ici : *first_name*.
85 1 Jean-Michel Glorian
86 3 Jean-Michel Glorian
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*.
87 3 Jean-Michel Glorian
88 3 Jean-Michel Glorian
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, dans l’ordre alphabétique (articles_tags plutôt que tags_articles)*.
89 3 Jean-Michel Glorian
90 3 Jean-Michel Glorian
91 5 Jean-Michel Glorian
h3. Vues
92 3 Jean-Michel Glorian
93 3 Jean-Michel Glorian
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*.
94 3 Jean-Michel Glorian
95 3 Jean-Michel Glorian
Le schéma classique est *src/Template/Controller/nom_de_fonction_avec_underscore.ctp*.
96 6 Jean-Michel Glorian
97 6 Jean-Michel Glorian
h2. Utilisation du serveur web de dev de CakePHP
98 6 Jean-Michel Glorian
99 6 Jean-Michel Glorian
 (à la place de apache)
100 6 Jean-Michel Glorian
101 6 Jean-Michel Glorian
/!\ Votre serveur MySQL doit être lancé !!!
102 6 Jean-Michel Glorian
103 6 Jean-Michel Glorian
* Se placer à la racine du projet.
104 6 Jean-Michel Glorian
105 6 Jean-Michel Glorian
* Lancer la commande suivante :
106 6 Jean-Michel Glorian
107 6 Jean-Michel Glorian
 <pre> bin/cake server </pre>
108 6 Jean-Michel Glorian
109 6 Jean-Michel Glorian
* Rendez-vous sur http://localhost:8765/
110 7 Jean-Michel Glorian
111 7 Jean-Michel Glorian
h2. Pour mettre à jour CakePHP
112 7 Jean-Michel Glorian
113 7 Jean-Michel Glorian
* Utiliser le composer : "php composer.phar update" à la racine de l'application
114 7 Jean-Michel Glorian
> Voir : http://book.cakephp.org/3.0/fr/installation.html#rester-a-jour-avec-les-derniers-changements-de-cakephp
115 7 Jean-Michel Glorian
116 7 Jean-Michel Glorian
* Puis il faut modifier le fichier : ./vendor/cakephp/cakephp/src/View/Helper/PaginatorHelper.php
117 7 Jean-Michel Glorian
  Ce fichier contient le template de l'helper "paginator" et il faut modifier le tableau "$_defaultConfig" et remplacer les balise "li" par des balises "span".
118 7 Jean-Michel Glorian
  Enfin dans le même tableau, il faut remplacer la ligne suivante : 
119 7 Jean-Michel Glorian
> 'current' => '<span class="active"><a href="">{{text}}</a></span>',
120 7 Jean-Michel Glorian
121 7 Jean-Michel Glorian
           Par : 
122 7 Jean-Michel Glorian
123 7 Jean-Michel Glorian
> 'current' => '<span class="current">{{text}}</span>',
124 7 Jean-Michel Glorian
125 7 Jean-Michel Glorian
* Puis il faut vider le cache de l'application (et du navigateur) pour que debug_kit fonctionne.