17.13 Autoloader
Le mécanisme d'autoloader de Dynacase parcourt tous les fichiers PHP (extension
.php
) du contexte pour indexer toutes les classes définies dans ces fichiers.
La liste des classes, avec leur fichier source d'inclusion, est alors stockée
dans le fichier .autoloader.cache
à la racine du contexte Dynacase.
Le fichier de cache .autoloader.cache
est automatiquement re-généré lorsqu'il
est inexistant (et donc lors du premier appel à l'autoloader faisant suite à la
suppression de ce fichier) ou qu'une classe demandée n'est pas trouvée dans le
cache. Suite à cette re-génération, si la classe demandée n'est toujours pas
présente dans le cache, alors une exception est levée indiquant que la classe
demandée n'existe pas.
De plus, l'autoloader est mis à jour à chaque déploiement d'une application.
Une même classe PHP (la comparaison est insensible à la casse) ne peut être livrée par deux fichiers PHP distincts, et une exception est levée lorsque deux fichiers PHP distincts définissant une même classe PHP sont trouvés.
17.13.1 Utilisation
17.13.1.1 Ajout d'une nouvelle classe
Pour ajouter une nouvelle classe, il suffit de livrer le fichier PHP qui définit cette classe et d'utiliser normalement cette classe.
L'autoloader lancera automatiquement une régénération du cache lors de la première utilisation de cette classe.
17.13.1.2 Déplacement d'une classe
Pour déplacer une classe d'un fichier PHP dans un nouveau fichier PHP (en
conservant le nom de la classe), il faut déplacer la classe dans le nouveau
fichier et supprimer le fichier de cache .autoloader.cache
ce qui a pour
effet de régénérer ce dernier lors de la prochaine utilisation d'une classe.
17.13.1.3 Suppression d'une classe
Pour supprimer une classe d'un fichier PHP il faut supprimer la classe de son
fichier et supprimer le fichier de cache .autoloader.cache
ce qui a pour
effet de régénérer ce dernier lors de la prochaine utilisation d'une classe.
17.13.1.4 Charger et activer manuellement l'autoloader Dynacase
Par défaut, l'autoloader est chargé et actif sur tout code PHP exécuté par Dynacase (Action, scripts CLI, etc.).
Cependant, dans le cas où vous voulez exécuter un code PHP tiers (non intégré
comme Action ou scripts CLI) qui utilise des
classes Dynacase, il faut inclure le fichier WHAT/autoload.php
afin de charger
et activer l'autoloader Dynacase :
require_once 'WHAT/autoload.php';
17.13.2 Personnalisation
17.13.2.1 Exclusion
Par défaut, l'autoloader indexe tous les fichiers PHP du contexte.
Pour exclure des répertoires (ou des fichiers) de l'indexation de l'autoloader, il faut déclarer ces éléments dans un fichier d'autoloader-ignore.
Les fichiers d'autoloader-ignore se trouvent dans le répertoire
.autoloader-ignore.d
situé à la racine du contexte et contiennent une liste de
motifs (au format shell glob) des éléments à ignorer.
Format :
Les lignes commençant par un
#
(dièse) sont des commentaires et sont ignorés ;Les lignes vides ou ne contenant que des espaces sont ignorés ;
-
Les espaces en début et en fin de motif sont conservés et interprétés comme tels lors de la correspondance avec les fichiers.
Ainsi,
MYAPP/lib/*
correspond aux chemins de fichiers qui commencent parMYAPP/lib
et qui se terminent par un espace).
Les motifs (au format shell glob) sont appliqués sur les chemins des fichiers PHP relatifs à la racine du contexte Dynacase (i.e.
MYAPP/lib/foo.php
).
Exemple de fichier .autoloader-ignore.d/myapp
:
# Ceci est un commentaire # Ne pas indexer les fichiers PHP sous `MYAPP/data` MYAPP/data/* # Idem. pour `MYAPP/lib` MYAPP/lib/*
17.13.2.2 Prévention des doublons de classes
Pour se prémunir d'erreurs de doublons de classes (une même classe PHP livrée
par deux fichiers PHP distinct), vous pouvez utiliser le programme
programs/check_autoloader
dans les phases de <post-install/>
et
<post-upgrade/>
(du info.xml
du module) afin de vérifier qu'il n'y a pas de
doublons de classes.
Exemple d'utilisation dans info.xml
:
<module name="foo" version="1.2.3" release="4"> [...] <post-upgrade> <process command="programs/check_autoloader"> <label lang="en">Check autoloader</label> </process> [...] </post-upgrade> </module>
17.13.3 Chemins d'inclusion (include_path)
Le paramètre include_path est défini en ajoutant le répertoire d'installation.
3.2.21Le répertoire d'installation est prioritaire aux autres chemins définis par votre configuration PHP. Les chemins sont :
DEFAULT_PUBDIR
-
DEFAULT_PUBDIR
/WHAT - Include path configuré par PHP