Developpement

Version 7 (Etienne Pallier, 05/02/2016 04:11 pm)

1 1 Etienne Pallier
h1. Labinvent 2.0 (cakephp3) - Développement
2 1 Etienne Pallier
3 1 Etienne Pallier
4 1 Etienne Pallier
5 3 Etienne Pallier
[[Installation|=> Page wiki pour l'installation]]
6 1 Etienne Pallier
7 4 Etienne Pallier
8 4 Etienne Pallier
{{toc}}
9 1 Etienne Pallier
10 1 Etienne Pallier
---
11 1 Etienne Pallier
12 1 Etienne Pallier
h2. LIENS UTILES
13 1 Etienne Pallier
14 1 Etienne Pallier
Activité sur le projet (gitlab): https://gitlab.irap.omp.eu/epallier/labinvent
15 1 Etienne Pallier
16 1 Etienne Pallier
Browse files (gitlab): https://gitlab.irap.omp.eu/epallier/labinvent/tree/master
17 1 Etienne Pallier
18 1 Etienne Pallier
Inventirap 1.3 (prod): https://inventirap.irap.omp.eu
19 1 Etienne Pallier
20 1 Etienne Pallier
Inventirap 1.3 (test): https://inventirap-test.irap.omp.eu/
21 1 Etienne Pallier
22 1 Etienne Pallier
Forum cakephp: http://discourse.cakephp.org
23 1 Etienne Pallier
24 1 Etienne Pallier
Quickstart tutorial: http://book.cakephp.org/3.0/en/quickstart.html
25 1 Etienne Pallier
26 1 Etienne Pallier
Bookmarker tutorial: https://github.com/cakephp/bookmarker-tutorial
27 1 Etienne Pallier
28 1 Etienne Pallier
Cakephp CRUD: https://github.com/FriendsOfCake/crud
29 1 Etienne Pallier
30 1 Etienne Pallier
---
31 1 Etienne Pallier
32 1 Etienne Pallier
h2. TODOLIST
33 1 Etienne Pallier
34 1 Etienne Pallier
 * 1) Materiels/form
35 1 Etienne Pallier
36 1 Etienne Pallier
 * 2) ACL
37 1 Etienne Pallier
38 1 Etienne Pallier
* installer une VM avec LDAP
39 1 Etienne Pallier
40 1 Etienne Pallier
---
41 1 Etienne Pallier
42 7 Etienne Pallier
h2. Installation from scratch (Sous UBuntu)
43 1 Etienne Pallier
44 1 Etienne Pallier
h3. Création projet avec Composer
45 1 Etienne Pallier
46 1 Etienne Pallier
* Télécharger composer.phar : 
47 1 Etienne Pallier
"curl -s https://getcomposer.org/installer | php"
48 1 Etienne Pallier
49 1 Etienne Pallier
* Avec le Composer créer un nouveau projet : 
50 1 Etienne Pallier
"php composer.phar create-project --prefer-dist cakephp/app labinvent_2.0"
51 1 Etienne Pallier
52 1 Etienne Pallier
> Voir structure projet : http://book.cakephp.org/3.0/fr/intro/cakephp-folder-structure.html
53 1 Etienne Pallier
54 1 Etienne Pallier
* On rempli la base de données avec le fichier sql
55 1 Etienne Pallier
56 1 Etienne Pallier
* On indique la BD utilisé à CakePHP dans le fichier config/app.php, propriété "Datasources".
57 1 Etienne Pallier
58 1 Etienne Pallier
* On se place à la racine du projet
59 1 Etienne Pallier
60 1 Etienne Pallier
* On génère le code Scaffold : 
61 1 Etienne Pallier
"bin/cake bake all nom_table" --> ça génére les modeles, les vues, et les controlleurs.
62 1 Etienne Pallier
63 1 Etienne Pallier
> Commande (en une fois) :
64 1 Etienne Pallier
> > bin/cake bake all categories && bin/cake bake all emprunts && bin/cake bake all groupes_metiers && bin/cake bake all groupes_thematiques && bin/cake bake all organismes && bin/cake bake all sites && bin/cake bake all sous_categories && bin/cake bake all suivis && bin/cake bake all sur_categories && bin/cake bake all type_suivis && bin/cake bake all documents && bin/cake bake all users && bin/cake bake all materiels
65 1 Etienne Pallier
66 1 Etienne Pallier
h3. Modification de la base de données 
67 1 Etienne Pallier
> Une version du sql corrigée au fur et à mesure est disponible dans le git :
68 1 Etienne Pallier
> > Dans database/, le fichier labinvent_2.0_19-04-16 correspond à la création de la base.
69 1 Etienne Pallier
> > Dans database/, le fichier labinvent_2.0_insert-irap_19-04-16 correspond aux insertions propre à l'IRAP, fichier insertion uniquement pour les dévellopeurs.
70 1 Etienne Pallier
71 1 Etienne Pallier
* Création table "config"
72 1 Etienne Pallier
73 1 Etienne Pallier
h3. Autres remarques lors du dévellopement
74 1 Etienne Pallier
75 1 Etienne Pallier
76 1 Etienne Pallier
* CakePHP permet de se configurer en PHP, on pourrait permettre au super-admin de configurer sa base, les noms, les logos, et autres graphiquement outils config dans la section outils ou dans le script d'installation, ou un autre script ?
77 1 Etienne Pallier
<pre>
78 1 Etienne Pallier
Configure::write('nomObjet', [
79 1 Etienne Pallier
    'attribut1' => 'valeur1',
80 1 Etienne Pallier
    'attribut2' => 'valeur2'
81 1 Etienne Pallier
]);
82 1 Etienne Pallier
</pre>
83 1 Etienne Pallier
84 1 Etienne Pallier
  La configuration du mode debug necessite l'extension "pdo_sqlite" (php5-sqlite pour ubuntu)...
85 1 Etienne Pallier
  Et même avec, ça marche pas (mais il n'y a plus d'erreurs dans le log de CakePHP)... vérifier syntaxe : "Configure::write('debug', false);".
86 1 Etienne Pallier
--> Syntaxe correct mais modifie la valeur momentanément...
87 1 Etienne Pallier
--> Utilisation de variable session pour un mode debug (mode install) personalisé (mode debug de CakePHP3, ne doit pas être actif sur un serveur de production). 
88 1 Etienne Pallier
89 1 Etienne Pallier
* Avec CakePHP3 on peut gérér les ACL avec plusieurs gestionnaires d’autorisation propre à chaque profils (rôles), et une table users dans la base. 
90 1 Etienne Pallier
(Lorsqu'un utilisateur se connecte, le gestionnaire de son type de compte se déclenche et les autres gestionnaires sont ignorés)
91 1 Etienne Pallier
92 1 Etienne Pallier
> Voir (explication) : http://book.cakephp.org/3.0/fr/controllers/components/authentication.html
93 1 Etienne Pallier
> Voir (exemple) : http://book.cakephp.org/3.0/fr/tutorials-and-examples/blog-auth-example/auth.html
94 1 Etienne Pallier
> Pour faire des tests d'authentication : http://book.cakephp.org/3.0/fr/development/testing.html#testing-authentication
95 1 Etienne Pallier
96 1 Etienne Pallier
97 1 Etienne Pallier
* La commande Bake de CakePHP3, permet aussi de générer des tests...
98 1 Etienne Pallier
---
99 1 Etienne Pallier
100 1 Etienne Pallier
* Suivre les conventions de CakePHP est le top pour ne pas avoir à refaire de la config (bidouiller), il faudrait vérifier réguliérement que c'est le cas (outil "cakephp-codesniffer")...
101 1 Etienne Pallier
> http://book.cakephp.org/3.0/fr/contributing/cakephp-coding-conventions.html
102 1 Etienne Pallier
103 1 Etienne Pallier
* La solution pour insérer un utilisateur directement dans la base et pouvoir se connecter avec dans l'application est de l'insérer avec un mot de passe haché de la méme façon.
104 1 Etienne Pallier
Le mot de passe "login" = "$2y$10$LZzpws3oDidBcqO/Fy1RTedLLk3ENTmplny5J7bZ6R1PqFoGOw3Ma".
105 1 Etienne Pallier
106 1 Etienne Pallier
* Vérifier que la migration vers la prochaine version de cakephp3 (3.3 ?) sera facile... (décrire la procédure à suivre)
107 1 Etienne Pallier
--> Une migration vers une version mineur 3.2 => 3.3, se réalise avec la mise à jour de CakePHP à l'aide de Composer
108 1 Etienne Pallier
--> Puis il faut regarder les changements dans la page migration correspondant à la version voulu et adapter les changements au code.
109 1 Etienne Pallier
==>http://book.cakephp.org/3.0/fr/appendices/3-2-migration-guide.html
110 1 Etienne Pallier
111 1 Etienne Pallier
* Outil (plugin) "DebugKit" de CakePHP3 : (a venir)
112 1 Etienne Pallier
113 1 Etienne Pallier
h2. %{margin-left:0px; font-weight:bold; font-size:25px;  display:block; color:red;}(DEV ONLY) NOTES FOR ECLIPSE USERS%
114 1 Etienne Pallier
115 1 Etienne Pallier
0) Install Eclipse (if necessary)
116 1 Etienne Pallier
117 1 Etienne Pallier
Get the Eclipse version for Php
118 1 Etienne Pallier
119 1 Etienne Pallier
120 1 Etienne Pallier
1) Deactivate CA certificate verification
121 1 Etienne Pallier
122 1 Etienne Pallier
Window -> Preferences -> Team -> git -> configuration -> Add entry
123 1 Etienne Pallier
124 1 Etienne Pallier
Key = http.sslVerify
125 1 Etienne Pallier
Value = false
126 1 Etienne Pallier
127 1 Etienne Pallier
2) Fetch the project
128 1 Etienne Pallier
129 1 Etienne Pallier
File/Import project from git
130 1 Etienne Pallier
131 1 Etienne Pallier
Select repository source: Clone URI: https://gitlab.irap.omp.eu/epallier/labinvent.git
132 1 Etienne Pallier
133 1 Etienne Pallier
Directory: 
134 1 Etienne Pallier
- par défaut, il propose : /Users/epallier/git/labinvent
135 1 Etienne Pallier
- mais on peut le mettre n'importe où ailleurs, 
136 1 Etienne Pallier
par exemple, on pourrait le mettre directement dans le repertoire web de Apache:
137 1 Etienne Pallier
/Applications/XAMPP/xamppfiles/htdocs 
138 1 Etienne Pallier
(si on veut que le projet s'execute directement dans le dossier web apache htdocs, mais ca n'est pas obligatoire...)
139 1 Etienne Pallier
140 1 Etienne Pallier
initial branch: master
141 1 Etienne Pallier
remote name: origin
142 1 Etienne Pallier
143 1 Etienne Pallier
Import as general project
144 1 Etienne Pallier
145 1 Etienne Pallier
Project name: LABINVENT
146 1 Etienne Pallier
147 1 Etienne Pallier
148 1 Etienne Pallier
149 1 Etienne Pallier
150 1 Etienne Pallier
3) Configure the project
151 1 Etienne Pallier
152 1 Etienne Pallier
a) S'assurer que le projet est bien reconnu comme un projet PHP (il doit y avoir un petit "P" sur le dossier racine du projet)
153 1 Etienne Pallier
Si ça n'est pas le cas, vérifier que le fichier .project (à la racine) contient bien
154 1 Etienne Pallier
	<natures>
155 1 Etienne Pallier
		<nature>org.eclipse.php.core.PHPNature</nature>
156 1 Etienne Pallier
	</natures>
157 1 Etienne Pallier
NB : Le fichier .project est normalement versionné et donc le projet labinvent devrait être reconnu automatiquement comme projet PHP
158 1 Etienne Pallier
159 1 Etienne Pallier
160 1 Etienne Pallier
b) S'assurer que les fichiers de vue de cakephp ("*.ctp") sont bien reconnus comme des fichiers PHP.
161 1 Etienne Pallier
Pour tester cela, ouvrir le fichier de vue cakephp/app/View/Categories/get_all.ctp
162 1 Etienne Pallier
Si ce fichier s'ouvre comme un simple fichier texte, c'est qu'il n'est pas reconnu par Eclipse comme un fichier Php. 
163 1 Etienne Pallier
Il faut donc associer l'editeur Php a l'extension de fichier "*.ctp" :
164 1 Etienne Pallier
- Preferences/General/Content types
165 1 Etienne Pallier
- Dans la liste "Content types", ouvrir la section "Text", selectionner PHP
166 1 Etienne Pallier
- Ajouter l'extension "*.ctp"
167 1 Etienne Pallier
168 1 Etienne Pallier
c) Vérifier la version de php utilisée (il serait préférable d'utiliser la meme version que celle officiellement utilisée par le logiciel, c'est à dire php 5.6, mais attention, le serveur IRAP utilise toujours une version 5.3 pour inventirap) :
169 1 Etienne Pallier
- Clic-droit sur le projet, Propriétés
170 1 Etienne Pallier
- PHP
171 1 Etienne Pallier
- Interpreter
172 1 Etienne Pallier
- Enable project specific settings, PHP Version : "PHP 5.6"
173 1 Etienne Pallier
174 1 Etienne Pallier
d) S'assurer que le texte est bien encodé en UTF-8 par défaut :
175 1 Etienne Pallier
clic-droit sur le dossier racine du projet (dans PHP Explorer), Properties, Resource : dans la zone "Text file encoding" cocher "Other" et sélectionner UTF-8
176 1 Etienne Pallier
(
177 1 Etienne Pallier
Il faudrait commiter ça mais je ne sais pas trop si c'est risqué ou pas.
178 1 Etienne Pallier
Les fichiers concernés sont :
179 1 Etienne Pallier
- .project (déjà versionné) : car il commence par la ligne "<?xml version="1.0" encoding="UTF-8"?>"
180 1 Etienne Pallier
- mais c'est surtout celui-ci qui compte (actuellement ignoré de git) : .settings/org.eclipse.core.resources.prefs : car sa 2eme ligne est "encoding/<project>=UTF-8"
181 1 Etienne Pallier
)
182 1 Etienne Pallier
183 1 Etienne Pallier
Les éléments suivants sont normalement DEJA ignorés par git, à vérifier :
184 1 Etienne Pallier
- .settings/
185 1 Etienne Pallier
- cakephp/app/tmp/ : tout sauf 
186 1 Etienne Pallier
	- documents/
187 1 Etienne Pallier
- cakephp/app/Config/ :
188 1 Etienne Pallier
	- database.php
189 1 Etienne Pallier
	- labinvent.php
190 1 Etienne Pallier
191 1 Etienne Pallier
192 1 Etienne Pallier
193 1 Etienne Pallier
194 1 Etienne Pallier
195 1 Etienne Pallier
<pre>
196 1 Etienne Pallier
*********************************************************
197 1 Etienne Pallier
REMARQUES INTERRESSANTES (MAIS VOUS POUVEZ LES IGNORER)
198 1 Etienne Pallier
199 1 Etienne Pallier
// DEBUT DES REMARQUES
200 1 Etienne Pallier
201 1 Etienne Pallier
A la racine du projet, j'ai plusieurs éléments cachés de configuration Eclipse :
202 1 Etienne Pallier
203 1 Etienne Pallier
1) fichier .buildpath 
204 1 Etienne Pallier
Il est versionné puisque "svn status .buildpath" (depuis la console) ne donne rien
205 1 Etienne Pallier
Il contient :
206 1 Etienne Pallier
207 1 Etienne Pallier
<?xml version="1.0" encoding="UTF-8"?>
208 1 Etienne Pallier
<buildpath>
209 1 Etienne Pallier
        <buildpathentry kind="con" path="org.eclipse.php.core.LANGUAGE"/>
210 1 Etienne Pallier
        <buildpathentry kind="lib" path="docs/mockup/mockup_html.zip"/>
211 1 Etienne Pallier
        <buildpathentry kind="src" path="cakephp"/>
212 1 Etienne Pallier
</buildpath>
213 1 Etienne Pallier
214 1 Etienne Pallier
2) fichier .project
215 1 Etienne Pallier
Il est déjà versionné
216 1 Etienne Pallier
Il contient :
217 1 Etienne Pallier
<?xml version="1.0" encoding="UTF-8"?>
218 1 Etienne Pallier
<projectDescription>
219 1 Etienne Pallier
        <name>invirap</name>
220 1 Etienne Pallier
        <comment></comment>
221 1 Etienne Pallier
        <projects>
222 1 Etienne Pallier
        </projects>
223 1 Etienne Pallier
        <buildSpec>
224 1 Etienne Pallier
                <buildCommand>
225 1 Etienne Pallier
                        <name>org.eclipse.wst.common.project.facet.core.builder</name>
226 1 Etienne Pallier
                        <arguments>
227 1 Etienne Pallier
                        </arguments>
228 1 Etienne Pallier
                </buildCommand>
229 1 Etienne Pallier
                <buildCommand>
230 1 Etienne Pallier
                        <name>org.eclipse.wst.validation.validationbuilder</name>
231 1 Etienne Pallier
                        <arguments>
232 1 Etienne Pallier
                        </arguments>
233 1 Etienne Pallier
                </buildCommand>
234 1 Etienne Pallier
                <buildCommand>
235 1 Etienne Pallier
                        <name>org.eclipse.dltk.core.scriptbuilder</name>
236 1 Etienne Pallier
                        <arguments>
237 1 Etienne Pallier
                        </arguments>
238 1 Etienne Pallier
                </buildCommand>
239 1 Etienne Pallier
        </buildSpec>
240 1 Etienne Pallier
        <natures>
241 1 Etienne Pallier
                <nature>org.eclipse.php.core.PHPNature</nature>
242 1 Etienne Pallier
                <nature>org.eclipse.wst.common.project.facet.core.nature</nature>
243 1 Etienne Pallier
        </natures>
244 1 Etienne Pallier
</projectDescription>
245 1 Etienne Pallier
246 1 Etienne Pallier
3) dossier .settings/ (exclus de svn)
247 1 Etienne Pallier
Il contient 3 fichiers :
248 1 Etienne Pallier
249 1 Etienne Pallier
- org.eclipse.core.resources.prefs : bizarrement, il ne contient que quelques références seulement :
250 1 Etienne Pallier
eclipse.preferences.version=1
251 1 Etienne Pallier
encoding//cakephp/app/Controller/MaterielsController.php=UTF-8
252 1 Etienne Pallier
encoding//cakephp/app/View/Elements/menu_view.ctp=UTF-8
253 1 Etienne Pallier
encoding//cakephp/app/View/Layouts/default.ctp=UTF-8
254 1 Etienne Pallier
encoding//cakephp/app/View/Materiels/index.ctp=UTF-8
255 1 Etienne Pallier
encoding//cakephp/app/View/Materiels/scaffold.view.ctp=UTF-8
256 1 Etienne Pallier
encoding//database/Upd_TableConstraints.sql=UTF-8
257 1 Etienne Pallier
encoding//database/update/README.txt=UTF-8
258 1 Etienne Pallier
encoding//docs/HOWTO.txt=UTF-8
259 1 Etienne Pallier
encoding//install/HOWTO.txt=UTF-8
260 1 Etienne Pallier
encoding/<project>=UTF-8
261 1 Etienne Pallier
262 1 Etienne Pallier
- org.eclipse.php.core.prefs
263 1 Etienne Pallier
eclipse.preferences.version=1
264 1 Etienne Pallier
include_path=0;/invirap\u00051;/invirap/docs/mockup/mockup_html.zip
265 1 Etienne Pallier
266 1 Etienne Pallier
- org.eclipse.wst.common.project.facet.core.xml : sans doute inutile ? (lié à "Faceted Project Validation Builder" dans Properties/Builders)
267 1 Etienne Pallier
<?xml version="1.0" encoding="UTF-8"?>
268 1 Etienne Pallier
<faceted-project>
269 1 Etienne Pallier
  <fixed facet="php.core.component"/>
270 1 Etienne Pallier
  <fixed facet="php.component"/>
271 1 Etienne Pallier
  <installed facet="php.core.component" version="1"/>
272 1 Etienne Pallier
  <installed facet="php.component" version="5.4"/>
273 1 Etienne Pallier
</faceted-project>
274 1 Etienne Pallier
275 1 Etienne Pallier
// FIN DES REMARQUES
276 1 Etienne Pallier
*********************************************************
277 1 Etienne Pallier
</pre>
278 1 Etienne Pallier
279 1 Etienne Pallier
4) (TODO:) Set Code style
280 1 Etienne Pallier
281 1 Etienne Pallier
Window/Preferences : PHP / Editor
282 1 Etienne Pallier
...
283 1 Etienne Pallier
284 1 Etienne Pallier
5) (TODO: virtualenv) Now, once the PHP5 virtual environment is installed (see above),
285 1 Etienne Pallier
set it in Eclipse as the project interpreter:
286 1 Etienne Pallier
287 1 Etienne Pallier
(cf http://virtphp.org)
288 1 Etienne Pallier
289 1 Etienne Pallier
...
290 1 Etienne Pallier
291 1 Etienne Pallier
6) (TODO:) Test
292 1 Etienne Pallier
293 1 Etienne Pallier
294 1 Etienne Pallier
7) (TODO:) Run
295 1 Etienne Pallier
296 1 Etienne Pallier
check http://localhost:8080/