L'arborescence de Dotclear contient un nouvel espace de nom Dotclear\Helper\Process qui embarque differentes classes utiles au fonctionnement des Utility et Process :
- Dotclear\Helper\Process\AbstractProcess
- Dotclear\Helper\Process\AbstractSingleton
- Dotclear\Helper\Process\AbstractUtility
- Dotclear\Helper\Process\TraitProcess
Utility
Normalement nul besoin de se préoccuper de cette partie, elle appartient au core de Dotclear, mais c'est toujours bon de savoir comment cela fonctionne.
Les Utility (Backend, Frontend, Upragde, Install) sont désormais des Container, leurs Process sont des services, leurs classes de second niveau sont des services et tous sont accessibles depuis des méthodes ( voir Modification des containeurs ) Les Utility étendent la classe abstraite AbstractUtility qui embarque tout ce qu'il faut pour charger leurs services. Enfin les Utility utilisent le trait TraitProcess qui embarque ce qu'il faut pour le bon déroulement du processus requis par le core.
Exemple de l'Utility Backend et de la classe de second niveau Favorites :
<?php
declare(strict_types=1);
namespace Dotclear\Core\Backend;
class Utility extends AbstractUtility
{
// ...
public function getDefaultServices(): array
{
return [
Favorites::class => Favorites::class,
// ...
];
}
public function favorites(): Favorites
{
return $this->get(Favorites::class);
}
// ...
}
Accessible désormais avec :
App::backend()->favorites();
Process
Jusqu'à Dotclear 2.36 toutes les classes de second niveaux du core (les servcies des Utility) et toutes les classes des plugins et thèmes lièes à la gestion de modules devaient étendre la classe Process du core. Depuis Dotclear 2.36 les services des Utility peuvent avoir besoin d'étendre d'autres classes ce qui serait impossible tel quel. La classes abstraite Process s'est donc transformée en trait, afin de pouvoir être utilisé en plus d'autres classes.
Exemple du plugin blogroll de la distribution :
<?php
declare(strict_types=1);
namespace Dotclear\Plugin\blogroll;
use Dotclear\Helper\Process\TraitProcess;
class Backend
{
use TraitProcess;
public static function init(): bool
{
//...
}
}
Les plugins dcProxy s'occupent de faire le lien entre les plugins / thèmes qui ne sont pas à jour et l'utilisation du trait.
Ce qu'il faut retenir et que là ou on utilisait :
<?php
declare(strict_types=1);
namespace Dotclear\Plugin\MonPlugin;
Use Dotclear\Core\Process;
class Backend extends Process
{
//...
}
Il faut utiliser :
<?php
declare(strict_types=1);
namespace Dotclear\Plugin\MonPlugin;
use Dotclear\Helper\Process\TraitProcess;
class Backend
{
use TraitProcess;
//...
}
.