"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Patrones de diseño PHP: controlador de página

Patrones de diseño PHP: controlador de página

Publicado el 2024-12-22
Navegar:227

PHP Design Patterns: Page Controller

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.

¿Qué es el controlador de página?

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:

  1. Tramitación de la solicitud: Procesamiento de los datos enviados por el cliente.
  2. Ejecutar la lógica específica de la página: validar entradas, interactuar con modelos o realizar cálculos.
  3. Presentar una respuesta: Pasar datos procesados ​​a una vista (plantilla) y devolver la respuesta final al cliente.

Ventajas del patrón

  1. Flujo simple: Cada página se asigna a su propio controlador dedicado.
  2. Separación de preocupaciones: Cada controlador maneja solo su propia lógica.
  3. Mantenibilidad: Los cambios en una página afectan solo a su controlador asociado.
  4. Escalabilidad: Agregar nuevas páginas es sencillo y no interrumpe la funcionalidad existente.

Estructura básica

Una implementación típica implica los siguientes componentes:

  • Controladores: archivos PHP que contienen lógica para páginas específicas.
  • Rutas: Un mecanismo de enrutamiento para asignar URL a controladores.
  • Vistas: Plantillas utilizadas para representar la interfaz de usuario.

Fluir

  1. El cliente envía una solicitud a una URL específica.
  2. El sistema de enrutamiento identifica el controlador apropiado para la solicitud.
  3. El controlador ejecuta la lógica requerida y delega la representación de la respuesta a una vista.
  4. La vista genera el resultado final y lo devuelve al cliente.

Ejemplo de implementación

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.";
}

Pros y contras

Ventajas

  • Organización: Los controladores son modulares y cada uno maneja una página específica.
  • Reutilizabilidad: Las vistas se pueden reutilizar en diferentes controladores.
  • Depuración: los errores son más fáciles de rastrear ya que cada página tiene su propio controlador dedicado.

Desventajas

  • Aumento del número de controladores: Los proyectos grandes pueden llevar a una proliferación de controladores, lo que requiere una mejor organización.
  • Duplicación de código: la lógica común entre los controladores puede repetirse. Esto se puede mitigar utilizando una clase de controlador base.

¿Cuándo utilizar el patrón del controlador de página?

  • Sistemas simples: Ideal para aplicaciones web pequeñas y medianas donde cada página tiene una lógica específica.
  • Proyectos modulares: cuando desea aislar la lógica para facilitar el mantenimiento.
  • Sin frameworks: Ideal para proyectos PHP sin frameworks robustos (como Laravel o Symfony).

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.

Declaración de liberación Este artículo se reproduce en: https://dev.to/xxzeroxx/php-design-patterns-page-controller-34f2?1 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

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