El patrón de diseño Page Controller es un enfoque arquitectónico común utilizado en sistemas basados en web. Organiza el flujo de control dedicando un controlador específico para manejar la lógica de una página o solicitud individual. Este enfoque ayuda a aislar responsabilidades, lo que hace que el código base sea más fácil de mantener y evolucionar.
En el patrón Controlador de página, cada página (o un grupo de páginas con comportamiento similar) tiene su propio controlador, responsable de:
Una implementación típica implica los siguientes componentes:
Fluir
Estructura del archivo
/htdocs /src /Controllers HomeController.php AboutController.php /Services ViewRenderer.php /Views home.html.php about.html.php /public index.php /routes.php composer.json
Cargador automático
{ "autoload": { "psr-4": { "App\\": "htdocs/" } } }
composer dump-autoload
Plantilla
Plantilla para la página de inicio y about.html.php.
= htmlspecialchars($title) ?> = htmlspecialchars($title) ?>
= htmlspecialchars($content) ?>
Ver procesador
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"; } }
Controlador de inicio
Maneja la lógica de la página de inicio.
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); } }
Acerca del controlador
Maneja la lógica de la página "Acerca de nosotros".
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); } }
rutas.php
Define asignaciones de rutas a los controladores.
use App\Controllers\HomeController; use App\Controllers\AboutController; // Define the routes in an associative array return [ '/' => HomeController::class, '/about' => AboutController::class, ];
index.php
El punto de entrada de la aplicación.
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."; }
Ventajas
Desventajas
Para proyectos más complejos, donde hay una reutilización lógica significativa o múltiples puntos de entrada, patrones como Controlador frontal o arquitectura MVC completa pueden ser más adecuados.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3