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. |