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 par MYAPP/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 :

  1. DEFAULT_PUBDIR
  2. DEFAULT_PUBDIR/WHAT
  3. Include path configuré par PHP
×