1. Contexte technologique
Intro
Le projet EVA est une version dérivée de la solution QPILOTE dont il exploitait le même cœur applicatif et une partie des modules.
1.1 Architecture
Le logiciel EVA est composé d’une interface utilisateur en PHtml contenant des composants développés en AngularJS ainsi qu’un applicatif en PHP Zend lié à une base de données MySQL. EVA possède donc une architecture 3 tiers monolithique mais modulaire. Certains processus sont autonomes et lancés automatiquement (mode batch). La structure du projet respecte les normes du framework Zend
1. |-- bin/
2. |-- config/
3. |-- module/
4. |-- Project/
5. |-- config/
6. |-- doctrine.config.php
7. |-- module.config.php
8. |-- router.config.php
9. |-- language/
10. |-- fr_FR.php
11. |-- src/
12. |-- Controller/
13. |-- Entity/
14. |-- Repository/
15. |-- View/
16. |-- module.php
17. |-- view/
18. |-- public/
19. |-- css/
20. |-- img/
21. |-- js/
22. |-- .htaccess
23. |-- index.php
24. |-- vendor/
1.2 Applicatif : Laminas Framework
Laminas est un framework PHP modulaire dont les dépendances sont gérées par Composer. Le logiciel fonctionne sous PHP 8.2 et Laminas 3.
Dans EVA, le principal module utilisé est Laminas-MVC pour gérer les deux modes disponibles : UI et API en JSON. L’utilisateur connecté est enregistré en session (module Laminas-session). L’internationalisation (module laminas-mvc-i18n) est présente dans EVA, bien que le logiciel ne soit distribué qu’en français aucun label ne doit être mis en dur dans le code ou les vues (remplir le fichier fr_FR dans chaque module).
Le routage du logiciel est assuré par module, la route principale étant dans le module Application. Les routes menant aux vues Laminas sont préfixées par le nom du module et celles renvoyant du JSON sont préfixées par /api/{module}.
Les routes sont protégées par la gestion des permissions de Laminas (ACL) qui se présentent sous cette forme :
1. module:e:entité:c/r/u/d
Ces permissions sont liées à des rôles eux-mêmes associés à des utilisateurs.
1.3 UI : Composants AngularJS
Dans le projet EVA, AngularJS n’est pas utilisé comme une Single Page Application. Chaque vue Zend charge le framework dans son ensemble afin d’initialiser les composants UI présents. Un ViewHelper Zend a été développé pour charger les fichiers JS Angular depuis une vue Zend.
1. $this->angular('js/src/app.js', 'prepend');
EVA utilise Bower pour gérer les dépendances AngularJS, les sources sont placées dans le dossier public/ de Zend et organisées par module fonctionnel. Les services Angular utilisent la couche API (JSON) PHP. Il existe deux composants partagés utilisés en divers endroits sur la plateforme :
Text-editor basé sur la technologie TinyMCE
Table-builder servant de grille pour les vues listes d’éléments
1.4 Données : Doctrine devant MySQL
Toutes les données de EVA sont enregistrées dans deux bases MySQL : une servant à l’administration globale et une autre pour les données client.
La couche d’accès aux données est gérée par l’ORM Doctrine. La mise à jour du schéma de données est gérée par une action Zend qui peut être appelée depuis le script
1. ./bin/update (Unix)
2. .\bin\update.bat (Windows)