La radiographie cérébrale de Beurky PHP expose les grands traits de l’organisation fonctionnelle de FrameBeurk.
Le premier traitement exécuté -quelque soit le point d’entrée, est l’appel du bootstrap. Celui-ci effectue toutes les opérations préparatoires au bon déroulement de la transaction :
La couche de communication avec la base de données doit définir toutes les fonctions de lecture/mise à jour utilisées dans les modules. Actuellement, les 2 fichiers livrés avec le framework sont des surcouches des interfaces mysql et mysqli.
La notion de contrôleur est ici quelque peu différente de celle du modèle MVC. Dans FrameBeurk, n’importe quel partie de script ayant une liste à sa disposition, notamment pour vérifier que la valeur d’une variable qu’on lui envoie est présente dans la liste, peut prétendre être nommé contrôleur. Les principaux sont :
Il reçoit les variables standard pour une Maj et vérifie la
compatibilité de leurs valeurs avec la configuration chargée par le bootstrap.
Notamment : le type d’entité de l’action doit exister, le code Maj doit
exister pour cette entité, le profil de l’utilisateur doit être autorisé à
cette action…
Lorsque tous les contrôles sont OK, le code de l’action de Maj est exécuté.
Le principe est le même que pour le précédent. Il reçoit et
vérifie les valeurs des variables clef pour la Vue demandée : Le type
d’entité de l’action doit exister, le code Vue doit exister pour cette entité,
le profil de l’utilisateur doit être autorisé à cette action…
Lorsque tous les contrôles sont OK, le code de l’action de Vue est exécuté.
Ce contrôleur doit être inséré dans le patron pour chaque
div dans laquelle du contenu dynamique doit être inséré.
Il balaie la liste des divs paramétrées dans le fichier de configuration et
insère celle dont le nom correspond, avec leur contenu qui peut être (1 ou
plusieurs parmi) : libellé statique, variable PHP, contenu généré par une
vue, widget.
Le point d’entrée dans le framework varie selon le type de données retournées (html, rss, css, js) et, pour le code html, si la page complète doit être affichée ou seulement une vue (Ajax).
Ci-après les cinématiques des différents points d’entrées.
Les cinématiques sont identiques pour les deux, à l’exception du patron utilisé pour la sortie du code html.
Ils partagent donc le même schéma :
En cas de réécriture d’URI, le serveur http doit être
paramétré pour substituer « interpreteur.php » à
« index.php » et « ajax.php ». Dans ce cas, c’est seulement
l’interpreteur qui charge le bootstrap.
L’interpréteur a pour fonction d’analyser l’URI réécrite pour alimenter les
variables PHP qui sont habituellement traitées par index.php et ajax.php
FrameBeurk peut gérer plusieurs styles pour le même site, à
choisir par l’utilisateur ou par paramétrage.
Ce script envoie dans un seul fichier toutes les déclarations css associées aux
différents modules et au patron, selon le style sélectionné.
De même, ce script envoie dans un seul fichier toutes les déclarations javascript associées aux différents modules et au patron.
Ce point d’entrée est destiné à l’alimentation des flux rss. Il n’utilise donc pas le contrôleur de Maj.
Le code d’une action de Maj contiendra typiquement les paragraphes suivants :
Les actions de Vue sont fréquemment plus complexes et seront utilement décomposées de manière à séparer le code SQL des requêtes d’accès à la base de données, de la génération du code HTML.
Les Vues seront donc constituées d’une succession d’appels à des fonctions PHP renvoyant les éléments suivants :
Une Query est une fonction PHP renvoyant une requête SQL de lecture de la base de données, soit sous la forme d’une chaine de caractère, soit sous la forme d’un tableau (voir plus loin le paragraphe « Couche de communication avec la DB »).
Les Queries sont regroupées par entité dans un fichier modèle situé dans le répertoire de l’entité.
Une carte est une fonction PHP générant un bloc de code HTML à partir du ResultSet obtenu par l’exécution d’une Query. Typiquement, la carte met en forme les données d’une entité et propose les actions de Maj possibles en fonctions de l’état de l’entité et du profil de l’utilisateur.
Les Cartes sont regroupées par entité dans un fichier helpers situé dans le répertoire de l’entité, ou directement dans le répertoire d’un module si le code est mutualisé entre plusieurs entités.