Bibliothèques
Le code “actif” de l’application, c’est à dire celui qui enchaîne les actions, est décrit dans les bibliothèques (librairies). En général, on retrouve une librairie par table, mais ce n’est pas systématique.
Les librairies héritent systématiquement de PpciLibrary, et contiennent en général les fonction suivantes :
- list : affichage de la liste des enregistrements de la table
- display : affichage du détail d’un enregistrement
- change : affichage de la page de modification
- write : écriture en base de données
- delete : suppression de l’enregistrement.
Selon le cas, write et delete renvoient soit vers display, soit vers list et, en cas de problème, la fonction recharge la page change.
Dans certains cas, notamment quand les fonctions peuvent être appelées depuis des endroits différents dans l’application, les fonctions renvoient simplement la valeur true ou false, et c’est le contrôleur qui se chargera d’appeler la fonction d’affichage, notamment après les opérations d’enregistrement.
La classe PpciLibrary
Elle gère l’accès direct à quelques services :
$this->message
: affichage de messages à l’écran et enregistrement de messages techniques dans Syslog$this->appConfig
: accès aux paramètres de configuration stockés dans app/Config/App.php ou mis à jour par l’intermédiaire de .env$this->log
: enregistrement de traces dans la table gacl.log de la base de données.
Pour qu’elle fonctionne correctement, elle doit être initialisée ainsi :
function __construct()
{parent::__construct();
$this->dataclass = new ModelsBorrower();
$this->keyName = "borrower_id";
if (isset($_REQUEST[$this->keyName])) {
$this->id = $_REQUEST[$this->keyName];
} }
$this->dataclass doit être une classe héritée de PpciModel.
Elle dispose également de fonctions génériques, qui permettent de simplifier l’écriture des classes dans l’application. Celles-ci déclenchent systématiquement une exception PpciException en cas d’erreur rencontrée.
Lecture d’un enregistrement et affichage de la page pour la modification ou l’affichage
function dataRead($id, $smartyPage, $idParent = 0)
La fonction appelle $this->dataclass->read ($id, true, $idParent)
, affecte le tableau de données lu à la variable $data
, puis déclenche l’affichage de la page $smartyPage
. Elle retourne le tableau $data
à la fonction appelante.
Écriture d’un enregistrement
function dataWrite(array $data, bool $isPartOfTransaction = false)
Écrit les données $data
dans la table gérée par $this->dataclass
(appel à la fonction write). Si l’indicateur de transaction n’est pas activé, un message informant de l’exécution de la commande est envoyé, et une trace est enregistrée dans la table log.
Suppression d’un enregistrement
function dataDelete($id, bool $isPartOfTransaction = false)
Supprime l’enregistrement identifié par $id
, et affiche un message pour informer de la réussite de l’opération si l’indicateur de transaction n’est pas activé.
Traitement des transactions
Dans le cas où plusieurs écritures concommittantes sont nécessaires, il est possible d’activer les transactions, gérées par CodeIgniter, avec les commandes suivantes :
try {
/*
* Start transaction
*/
$db = $this->dataclass->db;
$db->transBegin();
(...)$db->transCommit();
catch (PpciException $ie) {
} if ($db->transEnabled) {
$db->transRollback();
(...) }