Créer une class qui extends EagleCore\Database\Providers\DatabaseProvider. Cette class permettra a minima d'initialiser le système dans le cycle de vie du framework via la méthode abstraite initDatabase. Cette méthode reçoit en paramètre une configuration provenant de l'environnement qui sera traité plus bas.
Enregistrer le système dans l'environnement ainsi que son mode de configuration. Pour ce faire:
Fournir une instance du provider sur la clé DatabaseConfig::PROVIDER->value
Remplir la configuration attendue par le système dans la méthode initDatabase via la clé DatabaseConfig::PROVIDER_CONFIG->value
La suite de l'implémentation est libre en fonction du fonctionnement, toutefois des class et interfaces de structure sont prévus dans le namespace EagleCore\Database\System dans le chemin de même nom.
DatabaseModel permettant de définir la structure d'un model ainsi que des méthodes natives attendues
DatabaseCondition|DatabaseCondSeparator|DatabaseComparator permettant l'écriture de conditions de recherche via méthodes.
DatabaseActions énumération des différents évènements possibles.
DatabaseActionException exception liée à un évènement.
Exemple d'implémentation
Cet exemple va se baser sur un système fonctionnant à base d'un seul document JSON sans toutefois aller jusqu'à l'implémentation des conditions dynamiques ...
Implémentation du provider
class JsonSystemProvider extends DatabaseProvider{
protected static array|null $jsonDocument = null;
protected static string|null $documentPathFromStorage = null;
#[Override]
public function initDatabase(Config $providerConfig):void{
$providerConfig->checkConfigs("documentPathFromStorage");
self::$documentPathFromStorage = $providerConfig->getConfig(name: "documentPathFromStorage");
$fileContent = @file_get_contents(filename: AppStorage::buildStorageCompletePath(pathFromStorage: self::$documentPathFromStorage) );
if($fileContent == null)
return;
self::$jsonDocument = json_decode(json: $fileContent,associative: true);
}
#[Override]
public function getCon():array|null{
return self::$jsonDocument;
}
}