Le modèle de conception Page Controller est une approche architecturale courante utilisée dans les systèmes basés sur le Web. Il organise le flux de contrôle en dédiant un contrôleur spécifique pour gérer la logique d'une page ou d'une requête individuelle. Cette approche permet d'isoler les responsabilités, rendant la base de code plus facile à maintenir et à évoluer.
Dans le modèle Page Controller, chaque page (ou un groupe de pages ayant un comportement similaire) possède son propre contrôleur, responsable de :
Une implémentation typique implique les composants suivants :
Flux
Structure des fichiers
/htdocs /src /Controllers HomeController.php AboutController.php /Services ViewRenderer.php /Views home.html.php about.html.php /public index.php /routes.php composer.json
Chargeur automatique
{ "autoload": { "psr-4": { "App\": "htdocs/" } } }
composer dump-autoload
Modèle
Modèle pour la page d'accueil et about.html.php.
<!DOCTYPE html> <html> <head> <title><?= htmlspecialchars($title) ?></title> </head> <body> <h1><?= htmlspecialchars($title) ?></h1> <p><?= htmlspecialchars($content) ?></p> </body> </html>
ViewRenderer
namespace App\Services; class ViewRenderer { public function render(string $view, array $data = []): void { extract($data); // Turns array keys into variables include __DIR__ . "/../../Views/{$view}.html.php"; } }
Contrôleur domestique
Gère la logique de la page d'accueil.
namespace App\Controllers; use App\Services\ViewRenderer; class HomeController { public function __construct(private ViewRenderer $viewRenderer) { } public function handleRequest(): void { $data = [ 'title' => 'Welcome to the Site', 'content' => 'Homepage content.', ]; $this->viewRenderer->render('home', $data); } }
À propos du contrôleur
Gère la logique de la page « À propos de nous ».
namespace App\Controllers; use App\Services\ViewRenderer; class AboutController { public function __construct(private ViewRenderer $viewRenderer) { } public function handleRequest(): void { $data = [ 'title' => 'About Us', 'content' => 'Information about the company.', ]; $this->viewRenderer->render('about', $data); } }
routes.php
Définit les mappages de routes vers les contrôleurs.
use App\Controllers\HomeController; use App\Controllers\AboutController; // Define the routes in an associative array return [ '/' => HomeController::class, '/about' => AboutController::class, ];
index.php
Le point d’entrée de l’application.
/htdocs /src /Controllers HomeController.php AboutController.php /Services ViewRenderer.php /Views home.html.php about.html.php /public index.php /routes.php composer.json
Avantages
Inconvénients
Pour les projets plus complexes, où il y a une réutilisation logique importante ou plusieurs points d'entrée, des modèles comme Front Controller ou une architecture MVC complète peuvent être plus adaptés.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!