147 lines
4.9 KiB
PHP
147 lines
4.9 KiB
PHP
|
<?php
|
||
|
namespace nur\config;
|
||
|
|
||
|
use nur\func;
|
||
|
|
||
|
/**
|
||
|
* Interface IConfigManager: interface pour un gestionnaire de configuration
|
||
|
*/
|
||
|
interface IConfigManager {
|
||
|
/** ajouter une classe ou un objet à la liste des configurateurs */
|
||
|
function addConfigurator($configurators): void;
|
||
|
|
||
|
/**
|
||
|
* configurer les objets et les classes qui ne l'ont pas encore été. la liste
|
||
|
* des objets et des classes à configurer est fournie en appelant la méthode
|
||
|
* {@link addConfigurator()}
|
||
|
*
|
||
|
* par défaut, la configuration se fait en appelant toutes les méthodes
|
||
|
* publiques des objets et toutes les méthodes statiques des classes qui
|
||
|
* commencent par 'configure', e.g 'configureThis()' ou 'configure_db()',
|
||
|
* si elles n'ont pas déjà été appelées
|
||
|
*
|
||
|
* Il est possible de modifier la liste des méthodes appelées avec le tableau
|
||
|
* $options, qui doit être conforme au schema de {@link func::CALL_ALL_SCHEMA}
|
||
|
*/
|
||
|
function configure(?array $options=null): void;
|
||
|
|
||
|
/**
|
||
|
* réinitialiser la liste des objets et des classes qui ont été configurés.
|
||
|
*/
|
||
|
function resetConfiguration(): void;
|
||
|
|
||
|
#############################################################################
|
||
|
# gestion des objets
|
||
|
#
|
||
|
# la configuration est normalement stockée sous forme de tableau, et on accède
|
||
|
# aux valeurs avec des chemins de clé. parfois, on peut souhaiter que la
|
||
|
# valeur retournée pour un chemin de clé soit un objet, construit à partir de
|
||
|
# la valeur présente dans la configuration pour ce chemin-là.
|
||
|
#
|
||
|
# les méthodes de cette section permettent d'implémenter ce mode opératoire
|
||
|
|
||
|
/**
|
||
|
* indiquer si la definition ou le chemin de clé spécifiés doit retourner un
|
||
|
* objet.
|
||
|
*/
|
||
|
function isObject($definition, ?string $pkey=null): bool;
|
||
|
|
||
|
/**
|
||
|
* créer un nouvel objet avec la définition spécifiée.
|
||
|
*
|
||
|
* - l'on peut choisir de se baser sur le chemin de clé $pkey pour savoir
|
||
|
* comment instancier l'objet.
|
||
|
* - sinon, la définition sera un tableau de la forme
|
||
|
* [[$class], $args..., $key=>$values...]
|
||
|
* où $class est le nom de la classe d'objet, $args des arguments
|
||
|
* supplémentaires éventuels utilisés par le constructeur. les clés
|
||
|
* associatives sont utilisées pour faire un tableau qui est passé en
|
||
|
* dernier argument.
|
||
|
*/
|
||
|
function newObject($definition, ?string $pkey=null);
|
||
|
|
||
|
#############################################################################
|
||
|
|
||
|
/** spécifier le code application. */
|
||
|
function initAppcode(string $appcode): void;
|
||
|
|
||
|
/** obtenir le code application, utilisé pour les autorisations d'accès */
|
||
|
function getAppcode(): string;
|
||
|
|
||
|
const PROD = "prod";
|
||
|
const TEST = "test";
|
||
|
const DEVEL = "devel";
|
||
|
const DEFAULT_PROFILES = [
|
||
|
self::PROD,
|
||
|
self::TEST,
|
||
|
self::DEVEL,
|
||
|
];
|
||
|
|
||
|
/**
|
||
|
* clé de profil à utiliser pour le profil par défaut (c'est à dire que les
|
||
|
* valeurs sont valides pour tous les profils)
|
||
|
*/
|
||
|
const PROFILE_ALL = "ALL";
|
||
|
|
||
|
/**
|
||
|
* spécifier le profil à sélectionner par défaut si l'utilisateur n'en n'a pas
|
||
|
* fourni
|
||
|
*/
|
||
|
function setDefaultProfile(?string $defaultProfile): void;
|
||
|
|
||
|
/** retourner la liste des profils valides */
|
||
|
function getProfiles(): array;
|
||
|
|
||
|
/** spécifier le profil courant. */
|
||
|
function setProfile(string $profile): void ;
|
||
|
|
||
|
/**
|
||
|
* obtenir le profile courant.
|
||
|
*
|
||
|
* si le profil courant n'est pas défini:
|
||
|
* - si $ensureNn est vrai, calculer le profil courant
|
||
|
* - sinon retourner null
|
||
|
*
|
||
|
* le profil courant est calculé à partir *des données de l'environnement*
|
||
|
* si aucun profil n'a été spécifié par l'utilisateur dans l'environnement,
|
||
|
* choisir:
|
||
|
* - le profil spécifié par {@link setDefaultProfile()} ou
|
||
|
* - le premier profil de {@link getProfiles()}
|
||
|
*/
|
||
|
function getProfile(bool $ensureNn=true): ?string;
|
||
|
|
||
|
#############################################################################
|
||
|
|
||
|
/**
|
||
|
* Ajouter une configuration valide pour le(s) profil(s) spécifié(s)
|
||
|
*
|
||
|
* $config est:
|
||
|
* - soit une classe qui définit une ou plusieurs des constantes SCHEMA, DBS,
|
||
|
* MSGS, MAILS, APP, USER
|
||
|
* - soit une instance de {@link DynConfig}
|
||
|
*
|
||
|
* si $inProfiles===null, la configuration est valide dans tous les profils
|
||
|
*/
|
||
|
function addConfig($config, ?array $inProfiles=null): void;
|
||
|
|
||
|
/**
|
||
|
* obtenir la valeur au chemin de clé $pkey dans le profil spécifié
|
||
|
*
|
||
|
* le $inProfile===null, prendre le profil par défaut.
|
||
|
*/
|
||
|
function getValue(string $pkey, $default=null, ?string $inProfile=null);
|
||
|
|
||
|
#############################################################################
|
||
|
|
||
|
/** affirmer un fait, information qui peut être utilisée par l'application */
|
||
|
function setFact(string $fact, $value=true): void;
|
||
|
|
||
|
/** tester si un fait est avéré */
|
||
|
function isFact(string $fact, $value=true): bool;
|
||
|
|
||
|
/** spécifier le mode DEBUG */
|
||
|
function setDebug(?bool $debug=true): void;
|
||
|
/** est-on en mode DEBUG? */
|
||
|
function isDebug(): bool;
|
||
|
}
|