src/App/Handler/HomePageHandlerFactory
Ce fichier PHP est une "factory" pour le gestionnaire HomePageHandler dans une application Mezzio. La factory est responsable de la création d'une instance de HomePageHandler, en injectant les dépendances nécessaires. Voici une explication détaillée avec des commentaires pour chaque section importante :
<?php
declare(strict_types=1);
// Active le mode strict pour les types en PHP
namespace App\Handler;
use Mezzio\Router\RouterInterface;
use Mezzio\Template\TemplateRendererInterface;
use Psr\Container\ContainerInterface;
use Psr\Http\Server\RequestHandlerInterface;
use function assert;
// Importe la fonction assert pour les assertions
class HomePageHandlerFactory
{
public function __invoke(ContainerInterface $container): RequestHandlerInterface
{
// Récupère le routeur du conteneur de services
$router = $container->get(RouterInterface::class);
assert($router instanceof RouterInterface);
// Vérifie que $router est bien une instance de RouterInterface
// Tente de récupérer le moteur de template du conteneur, sinon définit à null
$template = $container->has(TemplateRendererInterface::class)
? $container->get(TemplateRendererInterface::class)
: null;
assert($template instanceof TemplateRendererInterface || null === $template);
// Vérifie que $template est bien une instance de TemplateRendererInterface ou null
// Retourne une nouvelle instance de HomePageHandler avec les dépendances injectées
return new HomePageHandler($container::class, $router, $template);
}
}
Ce fichier définit la classe HomePageHandlerFactory, qui a une méthode __invoke. Cette méthode est automatiquement appelée quand une instance de HomePageHandlerFactory est utilisée comme une fonction. La méthode __invoke prend un conteneur de services (ContainerInterface) en paramètre et utilise ce conteneur pour récupérer les dépendances nécessaires : un routeur (RouterInterface) et éventuellement un moteur de template (TemplateRendererInterface). Elle crée ensuite une nouvelle instance de HomePageHandler, en passant ces dépendances.
Ce modèle de factory est courant dans les applications PHP modernes utilisant des frameworks comme Mezzio, car il facilite l'injection de dépendances et rend le code plus modulaire et testable. En utilisant une factory, le code qui crée les objets est séparé du code qui les utilise, permettant une plus grande flexibilité et une meilleure gestion des dépendances.