Le modèle de conception Page Controller est une approche architecturale courante utilisée dans les systèmes 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, facilitant ainsi la maintenance et l'évolution de la base de code.
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 :
Couler
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.
= htmlspecialchars($title) ?> = htmlspecialchars($title) ?>
= htmlspecialchars($content) ?>
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.
require_once __DIR__ . '/../vendor/autoload.php'; use App\Services\ViewRenderer; // Include the routes $routes = require_once __DIR__ . '/../routes.php'; // Instantiate the view rendering service $viewRenderer = new ViewRenderer(); // Get the current route from the request URI $requestUri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH); // Check if the route exists and resolve the controller if (isset($routes[$requestUri])) { $controllerClass = $routes[$requestUri]; $controller = new $controllerClass($viewRenderer); $controller->handleRequest(); } else { http_response_code(404); echo "Page not found."; }
Avantages
Inconvénients
Pour les projets plus complexes, où il existe une réutilisation logique importante ou plusieurs points d'entrée, des modèles tels que Front Controller ou une architecture MVC complète peuvent être plus adaptés.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3