Developpement

Version 9 (Etienne Pallier, 05/02/2016 04:14 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 9 Etienne Pallier
h2. %{margin-left:0px; font-weight:bold; font-size:25px;  display:block; color:red;}I - Schéma de la base de données (v2.0.0)%
43 9 Etienne Pallier
44 9 Etienne Pallier
45 9 Etienne Pallier
{{thumbnail(PYROS_PDM_v021.png, size=300, title=Pyros data model)}}
46 9 Etienne Pallier
47 9 Etienne Pallier
---
48 9 Etienne Pallier
49 9 Etienne Pallier
50 7 Etienne Pallier
h2. Installation from scratch (Sous UBuntu)
51 1 Etienne Pallier
52 1 Etienne Pallier
h3. Création projet avec Composer
53 1 Etienne Pallier
54 1 Etienne Pallier
* Télécharger composer.phar : 
55 1 Etienne Pallier
"curl -s https://getcomposer.org/installer | php"
56 1 Etienne Pallier
57 1 Etienne Pallier
* Avec le Composer créer un nouveau projet : 
58 1 Etienne Pallier
"php composer.phar create-project --prefer-dist cakephp/app labinvent_2.0"
59 1 Etienne Pallier
60 1 Etienne Pallier
> Voir structure projet : http://book.cakephp.org/3.0/fr/intro/cakephp-folder-structure.html
61 1 Etienne Pallier
62 1 Etienne Pallier
* On rempli la base de données avec le fichier sql
63 1 Etienne Pallier
64 1 Etienne Pallier
* On indique la BD utilisé à CakePHP dans le fichier config/app.php, propriété "Datasources".
65 1 Etienne Pallier
66 1 Etienne Pallier
* On se place à la racine du projet
67 1 Etienne Pallier
68 1 Etienne Pallier
* On génère le code Scaffold : 
69 1 Etienne Pallier
"bin/cake bake all nom_table" --> ça génére les modeles, les vues, et les controlleurs.
70 1 Etienne Pallier
71 1 Etienne Pallier
> Commande (en une fois) :
72 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
73 1 Etienne Pallier
74 1 Etienne Pallier
h3. Modification de la base de données 
75 1 Etienne Pallier
> Une version du sql corrigée au fur et à mesure est disponible dans le git :
76 1 Etienne Pallier
> > Dans database/, le fichier labinvent_2.0_19-04-16 correspond à la création de la base.
77 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.
78 1 Etienne Pallier
79 1 Etienne Pallier
* Création table "config"
80 1 Etienne Pallier
81 1 Etienne Pallier
h3. Autres remarques lors du dévellopement
82 1 Etienne Pallier
83 1 Etienne Pallier
84 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 ?
85 1 Etienne Pallier
<pre>
86 1 Etienne Pallier
Configure::write('nomObjet', [
87 1 Etienne Pallier
    'attribut1' => 'valeur1',
88 1 Etienne Pallier
    'attribut2' => 'valeur2'
89 1 Etienne Pallier
]);
90 1 Etienne Pallier
</pre>
91 1 Etienne Pallier
92 1 Etienne Pallier
  La configuration du mode debug necessite l'extension "pdo_sqlite" (php5-sqlite pour ubuntu)...
93 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);".
94 1 Etienne Pallier
--> Syntaxe correct mais modifie la valeur momentanément...
95 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). 
96 1 Etienne Pallier
97 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. 
98 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)
99 1 Etienne Pallier
100 1 Etienne Pallier
> Voir (explication) : http://book.cakephp.org/3.0/fr/controllers/components/authentication.html
101 1 Etienne Pallier
> Voir (exemple) : http://book.cakephp.org/3.0/fr/tutorials-and-examples/blog-auth-example/auth.html
102 1 Etienne Pallier
> Pour faire des tests d'authentication : http://book.cakephp.org/3.0/fr/development/testing.html#testing-authentication
103 1 Etienne Pallier
104 1 Etienne Pallier
105 1 Etienne Pallier
* La commande Bake de CakePHP3, permet aussi de générer des tests...
106 1 Etienne Pallier
---
107 1 Etienne Pallier
108 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")...
109 1 Etienne Pallier
> http://book.cakephp.org/3.0/fr/contributing/cakephp-coding-conventions.html
110 1 Etienne Pallier
111 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.
112 1 Etienne Pallier
Le mot de passe "login" = "$2y$10$LZzpws3oDidBcqO/Fy1RTedLLk3ENTmplny5J7bZ6R1PqFoGOw3Ma".
113 1 Etienne Pallier
114 1 Etienne Pallier
* Vérifier que la migration vers la prochaine version de cakephp3 (3.3 ?) sera facile... (décrire la procédure à suivre)
115 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
116 1 Etienne Pallier
--> Puis il faut regarder les changements dans la page migration correspondant à la version voulu et adapter les changements au code.
117 1 Etienne Pallier
==>http://book.cakephp.org/3.0/fr/appendices/3-2-migration-guide.html
118 1 Etienne Pallier
119 1 Etienne Pallier
* Outil (plugin) "DebugKit" de CakePHP3 : (a venir)
120 1 Etienne Pallier
121 8 Etienne Pallier
h2. %{margin-left:0px; font-weight:bold; font-size:25px;  display:block; color:red;}NOTES FOR ECLIPSE USERS%
122 1 Etienne Pallier
123 1 Etienne Pallier
0) Install Eclipse (if necessary)
124 1 Etienne Pallier
125 1 Etienne Pallier
Get the Eclipse version for Php
126 1 Etienne Pallier
127 1 Etienne Pallier
128 1 Etienne Pallier
1) Deactivate CA certificate verification
129 1 Etienne Pallier
130 1 Etienne Pallier
Window -> Preferences -> Team -> git -> configuration -> Add entry
131 1 Etienne Pallier
132 1 Etienne Pallier
Key = http.sslVerify
133 1 Etienne Pallier
Value = false
134 1 Etienne Pallier
135 1 Etienne Pallier
2) Fetch the project
136 1 Etienne Pallier
137 1 Etienne Pallier
File/Import project from git
138 1 Etienne Pallier
139 1 Etienne Pallier
Select repository source: Clone URI: https://gitlab.irap.omp.eu/epallier/labinvent.git
140 1 Etienne Pallier
141 1 Etienne Pallier
Directory: 
142 1 Etienne Pallier
- par défaut, il propose : /Users/epallier/git/labinvent
143 1 Etienne Pallier
- mais on peut le mettre n'importe où ailleurs, 
144 1 Etienne Pallier
par exemple, on pourrait le mettre directement dans le repertoire web de Apache:
145 1 Etienne Pallier
/Applications/XAMPP/xamppfiles/htdocs 
146 1 Etienne Pallier
(si on veut que le projet s'execute directement dans le dossier web apache htdocs, mais ca n'est pas obligatoire...)
147 1 Etienne Pallier
148 1 Etienne Pallier
initial branch: master
149 1 Etienne Pallier
remote name: origin
150 1 Etienne Pallier
151 1 Etienne Pallier
Import as general project
152 1 Etienne Pallier
153 1 Etienne Pallier
Project name: LABINVENT
154 1 Etienne Pallier
155 1 Etienne Pallier
156 1 Etienne Pallier
157 1 Etienne Pallier
158 1 Etienne Pallier
3) Configure the project
159 1 Etienne Pallier
160 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)
161 1 Etienne Pallier
Si ça n'est pas le cas, vérifier que le fichier .project (à la racine) contient bien
162 1 Etienne Pallier
	<natures>
163 1 Etienne Pallier
		<nature>org.eclipse.php.core.PHPNature</nature>
164 1 Etienne Pallier
	</natures>
165 1 Etienne Pallier
NB : Le fichier .project est normalement versionné et donc le projet labinvent devrait être reconnu automatiquement comme projet PHP
166 1 Etienne Pallier
167 1 Etienne Pallier
168 1 Etienne Pallier
b) S'assurer que les fichiers de vue de cakephp ("*.ctp") sont bien reconnus comme des fichiers PHP.
169 1 Etienne Pallier
Pour tester cela, ouvrir le fichier de vue cakephp/app/View/Categories/get_all.ctp
170 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. 
171 1 Etienne Pallier
Il faut donc associer l'editeur Php a l'extension de fichier "*.ctp" :
172 1 Etienne Pallier
- Preferences/General/Content types
173 1 Etienne Pallier
- Dans la liste "Content types", ouvrir la section "Text", selectionner PHP
174 1 Etienne Pallier
- Ajouter l'extension "*.ctp"
175 1 Etienne Pallier
176 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) :
177 1 Etienne Pallier
- Clic-droit sur le projet, Propriétés
178 1 Etienne Pallier
- PHP
179 1 Etienne Pallier
- Interpreter
180 1 Etienne Pallier
- Enable project specific settings, PHP Version : "PHP 5.6"
181 1 Etienne Pallier
182 1 Etienne Pallier
d) S'assurer que le texte est bien encodé en UTF-8 par défaut :
183 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
184 1 Etienne Pallier
(
185 1 Etienne Pallier
Il faudrait commiter ça mais je ne sais pas trop si c'est risqué ou pas.
186 1 Etienne Pallier
Les fichiers concernés sont :
187 1 Etienne Pallier
- .project (déjà versionné) : car il commence par la ligne "<?xml version="1.0" encoding="UTF-8"?>"
188 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"
189 1 Etienne Pallier
)
190 1 Etienne Pallier
191 1 Etienne Pallier
Les éléments suivants sont normalement DEJA ignorés par git, à vérifier :
192 1 Etienne Pallier
- .settings/
193 1 Etienne Pallier
- cakephp/app/tmp/ : tout sauf 
194 1 Etienne Pallier
	- documents/
195 1 Etienne Pallier
- cakephp/app/Config/ :
196 1 Etienne Pallier
	- database.php
197 1 Etienne Pallier
	- labinvent.php
198 1 Etienne Pallier
199 1 Etienne Pallier
200 1 Etienne Pallier
201 1 Etienne Pallier
202 1 Etienne Pallier
203 1 Etienne Pallier
<pre>
204 1 Etienne Pallier
*********************************************************
205 1 Etienne Pallier
REMARQUES INTERRESSANTES (MAIS VOUS POUVEZ LES IGNORER)
206 1 Etienne Pallier
207 1 Etienne Pallier
// DEBUT DES REMARQUES
208 1 Etienne Pallier
209 1 Etienne Pallier
A la racine du projet, j'ai plusieurs éléments cachés de configuration Eclipse :
210 1 Etienne Pallier
211 1 Etienne Pallier
1) fichier .buildpath 
212 1 Etienne Pallier
Il est versionné puisque "svn status .buildpath" (depuis la console) ne donne rien
213 1 Etienne Pallier
Il contient :
214 1 Etienne Pallier
215 1 Etienne Pallier
<?xml version="1.0" encoding="UTF-8"?>
216 1 Etienne Pallier
<buildpath>
217 1 Etienne Pallier
        <buildpathentry kind="con" path="org.eclipse.php.core.LANGUAGE"/>
218 1 Etienne Pallier
        <buildpathentry kind="lib" path="docs/mockup/mockup_html.zip"/>
219 1 Etienne Pallier
        <buildpathentry kind="src" path="cakephp"/>
220 1 Etienne Pallier
</buildpath>
221 1 Etienne Pallier
222 1 Etienne Pallier
2) fichier .project
223 1 Etienne Pallier
Il est déjà versionné
224 1 Etienne Pallier
Il contient :
225 1 Etienne Pallier
<?xml version="1.0" encoding="UTF-8"?>
226 1 Etienne Pallier
<projectDescription>
227 1 Etienne Pallier
        <name>invirap</name>
228 1 Etienne Pallier
        <comment></comment>
229 1 Etienne Pallier
        <projects>
230 1 Etienne Pallier
        </projects>
231 1 Etienne Pallier
        <buildSpec>
232 1 Etienne Pallier
                <buildCommand>
233 1 Etienne Pallier
                        <name>org.eclipse.wst.common.project.facet.core.builder</name>
234 1 Etienne Pallier
                        <arguments>
235 1 Etienne Pallier
                        </arguments>
236 1 Etienne Pallier
                </buildCommand>
237 1 Etienne Pallier
                <buildCommand>
238 1 Etienne Pallier
                        <name>org.eclipse.wst.validation.validationbuilder</name>
239 1 Etienne Pallier
                        <arguments>
240 1 Etienne Pallier
                        </arguments>
241 1 Etienne Pallier
                </buildCommand>
242 1 Etienne Pallier
                <buildCommand>
243 1 Etienne Pallier
                        <name>org.eclipse.dltk.core.scriptbuilder</name>
244 1 Etienne Pallier
                        <arguments>
245 1 Etienne Pallier
                        </arguments>
246 1 Etienne Pallier
                </buildCommand>
247 1 Etienne Pallier
        </buildSpec>
248 1 Etienne Pallier
        <natures>
249 1 Etienne Pallier
                <nature>org.eclipse.php.core.PHPNature</nature>
250 1 Etienne Pallier
                <nature>org.eclipse.wst.common.project.facet.core.nature</nature>
251 1 Etienne Pallier
        </natures>
252 1 Etienne Pallier
</projectDescription>
253 1 Etienne Pallier
254 1 Etienne Pallier
3) dossier .settings/ (exclus de svn)
255 1 Etienne Pallier
Il contient 3 fichiers :
256 1 Etienne Pallier
257 1 Etienne Pallier
- org.eclipse.core.resources.prefs : bizarrement, il ne contient que quelques références seulement :
258 1 Etienne Pallier
eclipse.preferences.version=1
259 1 Etienne Pallier
encoding//cakephp/app/Controller/MaterielsController.php=UTF-8
260 1 Etienne Pallier
encoding//cakephp/app/View/Elements/menu_view.ctp=UTF-8
261 1 Etienne Pallier
encoding//cakephp/app/View/Layouts/default.ctp=UTF-8
262 1 Etienne Pallier
encoding//cakephp/app/View/Materiels/index.ctp=UTF-8
263 1 Etienne Pallier
encoding//cakephp/app/View/Materiels/scaffold.view.ctp=UTF-8
264 1 Etienne Pallier
encoding//database/Upd_TableConstraints.sql=UTF-8
265 1 Etienne Pallier
encoding//database/update/README.txt=UTF-8
266 1 Etienne Pallier
encoding//docs/HOWTO.txt=UTF-8
267 1 Etienne Pallier
encoding//install/HOWTO.txt=UTF-8
268 1 Etienne Pallier
encoding/<project>=UTF-8
269 1 Etienne Pallier
270 1 Etienne Pallier
- org.eclipse.php.core.prefs
271 1 Etienne Pallier
eclipse.preferences.version=1
272 1 Etienne Pallier
include_path=0;/invirap\u00051;/invirap/docs/mockup/mockup_html.zip
273 1 Etienne Pallier
274 1 Etienne Pallier
- org.eclipse.wst.common.project.facet.core.xml : sans doute inutile ? (lié à "Faceted Project Validation Builder" dans Properties/Builders)
275 1 Etienne Pallier
<?xml version="1.0" encoding="UTF-8"?>
276 1 Etienne Pallier
<faceted-project>
277 1 Etienne Pallier
  <fixed facet="php.core.component"/>
278 1 Etienne Pallier
  <fixed facet="php.component"/>
279 1 Etienne Pallier
  <installed facet="php.core.component" version="1"/>
280 1 Etienne Pallier
  <installed facet="php.component" version="5.4"/>
281 1 Etienne Pallier
</faceted-project>
282 1 Etienne Pallier
283 1 Etienne Pallier
// FIN DES REMARQUES
284 1 Etienne Pallier
*********************************************************
285 1 Etienne Pallier
</pre>
286 1 Etienne Pallier
287 1 Etienne Pallier
4) (TODO:) Set Code style
288 1 Etienne Pallier
289 1 Etienne Pallier
Window/Preferences : PHP / Editor
290 1 Etienne Pallier
...
291 1 Etienne Pallier
292 1 Etienne Pallier
5) (TODO: virtualenv) Now, once the PHP5 virtual environment is installed (see above),
293 1 Etienne Pallier
set it in Eclipse as the project interpreter:
294 1 Etienne Pallier
295 1 Etienne Pallier
(cf http://virtphp.org)
296 1 Etienne Pallier
297 1 Etienne Pallier
...
298 1 Etienne Pallier
299 1 Etienne Pallier
6) (TODO:) Test
300 1 Etienne Pallier
301 1 Etienne Pallier
302 1 Etienne Pallier
7) (TODO:) Run
303 1 Etienne Pallier
304 1 Etienne Pallier
check http://localhost:8080/