CakePhp

Version 3 (Jean-Michel Glorian, 02/19/2018 04:56 pm)

1 1 Jean-Michel Glorian
h1. CakePhp
2 2 Jean-Michel Glorian
3 3 Jean-Michel Glorian
{{>toc}}
4 2 Jean-Michel Glorian
h2. Liens
5 2 Jean-Michel Glorian
6 2 Jean-Michel Glorian
* ROADMAP: https://github.com/cakephp/cakephp/wiki
7 2 Jean-Michel Glorian
* *Migrations* plugin: http://book.cakephp.org/3.0/fr/migrations.html
8 2 Jean-Michel Glorian
* *CONVENTIONS*: https://book.cakephp.org/3.0/fr/intro/conventions.html
9 2 Jean-Michel Glorian
* Déploiement : https://book.cakephp.org/3.0/fr/deployment.html
10 2 Jean-Michel Glorian
* Forum cakephp: http://discourse.cakephp.org
11 2 Jean-Michel Glorian
* Debug Kit : https://book.cakephp.org/3.0/fr/debug-kit.html
12 2 Jean-Michel Glorian
* Quickstart tutorial: http://book.cakephp.org/3.0/en/quickstart.html
13 2 Jean-Michel Glorian
* Bookmarker tutorial: https://github.com/cakephp/bookmarker-tutorial
14 2 Jean-Michel Glorian
* Cakephp CRUD: https://github.com/FriendsOfCake/crud
15 2 Jean-Michel Glorian
* Plugin Chronos pour gérer les dates plus facilement : https://book.cakephp.org/3.0/fr/chronos.html
16 3 Jean-Michel Glorian
17 3 Jean-Michel Glorian
h2. CONVENTIONS CAKEPHP
18 3 Jean-Michel Glorian
19 3 Jean-Michel Glorian
https://book.cakephp.org/3.0/fr/intro/conventions.html
20 3 Jean-Michel Glorian
21 3 Jean-Michel Glorian
22 3 Jean-Michel Glorian
* *+SYNTHÈSE GÉNÉRALE+*
23 3 Jean-Michel Glorian
24 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 :
25 3 Jean-Michel Glorian
26 3 Jean-Michel Glorian
<pre>
27 3 Jean-Michel Glorian
    Nom de la table de la base de données: “articles”
28 3 Jean-Michel Glorian
    Classe Table: ArticlesTable se trouvant dans src/Model/Table/ArticlesTable.php
29 3 Jean-Michel Glorian
    Classe Entity: Article se trouvant dans src/Model/Entity/Article.php
30 3 Jean-Michel Glorian
    Classe Controller: ArticlesController se trouvant dans src/Controller/ArticlesController.php
31 3 Jean-Michel Glorian
    Template de View se trouvant dans src/Template/Articles/index.ctp
32 3 Jean-Michel Glorian
</pre>
33 3 Jean-Michel Glorian
34 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.
35 3 Jean-Michel Glorian
36 3 Jean-Michel Glorian
37 3 Jean-Michel Glorian
* *+Controleurs+*
38 3 Jean-Michel Glorian
39 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
40 3 Jean-Michel Glorian
41 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
42 3 Jean-Michel Glorian
43 3 Jean-Michel Glorian
UsersController (qui serait défini dans le nom de fichier UsersController.php) est accessible à l’adresse http://exemple.com/users.
44 3 Jean-Michel Glorian
45 3 Jean-Michel Glorian
/article-categories/view-all est la bonne forme pour accéder à l’action ArticleCategoriesController::viewAll()
46 3 Jean-Michel Glorian
47 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:
48 3 Jean-Michel Glorian
49 3 Jean-Michel Glorian
<pre>
50 3 Jean-Michel Glorian
$this->Html->link('link-title', [
51 3 Jean-Michel Glorian
    'prefix' => 'MyPrefix' // CamelCased
52 3 Jean-Michel Glorian
    'plugin' => 'MyPlugin', // CamelCased
53 3 Jean-Michel Glorian
    'controller' => 'ControllerName', // CamelCased
54 3 Jean-Michel Glorian
    'action' => 'actionName' // camelBacked
55 3 Jean-Michel Glorian
]
56 3 Jean-Michel Glorian
</pre>
57 3 Jean-Michel Glorian
58 3 Jean-Michel Glorian
59 3 Jean-Michel Glorian
* *+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 3 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 3 Jean-Michel Glorian
77 3 Jean-Michel Glorian
* *+Modèles et Bases de Données+*
78 3 Jean-Michel Glorian
79 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.
80 3 Jean-Michel Glorian
81 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*.
82 3 Jean-Michel Glorian
83 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*.
84 3 Jean-Michel Glorian
85 3 Jean-Michel Glorian
Les *noms des champs avec deux mots ou plus* doivent être avec des *underscores* comme ici : *first_name*.
86 3 Jean-Michel Glorian
87 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*.
88 3 Jean-Michel Glorian
89 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)*.
90 3 Jean-Michel Glorian
91 3 Jean-Michel Glorian
92 3 Jean-Michel Glorian
* *+Vues+*
93 3 Jean-Michel Glorian
94 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*.
95 3 Jean-Michel Glorian
96 3 Jean-Michel Glorian
Le schéma classique est *src/Template/Controller/nom_de_fonction_avec_underscore.ctp*.