«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Шаблоны проектирования PHP: контроллер страниц

Шаблоны проектирования PHP: контроллер страниц

Опубликовано 22 декабря 2024 г.
Просматривать:671

PHP Design Patterns: Page Controller

Шаблон проектирования Контроллер страниц — это распространенный архитектурный подход, используемый в веб-системах. Он организует поток управления, выделяя определенный контроллер для обработки логики отдельной страницы или запроса. Такой подход помогает изолировать обязанности, упрощая поддержку и развитие кодовой базы.

Что такое контроллер страницы?

В шаблоне Контроллер страниц каждая страница (или группа страниц со схожим поведением) имеет свой собственный контроллер, отвечающий за:

  1. Обработка запроса: обработка данных, отправленных от клиента.
  2. Выполнение логики, специфичной для страницы: проверка входных данных, взаимодействие с моделями или выполнение вычислений.
  3. Отображение ответа: передача обработанных данных в представление (шаблон) и возврат окончательного ответа клиенту.

Преимущества шаблона

  1. Простой процесс: каждая страница сопоставлена ​​с собственным выделенным контроллером.
  2. Разделение задач: каждый контроллер обрабатывает только свою собственную логику.
  3. Удобство обслуживания: изменения на одной странице влияют только на связанный с ней контроллер.
  4. Масштабируемость: добавление новых страниц не вызывает затруднений и не нарушает существующую функциональность.

Базовая структура

Типичная реализация включает в себя следующие компоненты:

  • Контроллеры: файлы PHP, содержащие логику для определенных страниц.
  • Маршруты: механизм маршрутизации для сопоставления URL-адресов с контроллерами.
  • Представления: шаблоны, используемые для отображения пользовательского интерфейса.

Поток

  1. Клиент отправляет запрос на определенный URL.
  2. Система маршрутизации определяет соответствующий контроллер для запроса.
  3. Контроллер выполняет необходимую логику и делегирует рендеринг ответа представлению.
  4. Представление генерирует конечный результат и возвращает его клиенту.

Пример реализации

Структура файла

/htdocs
    /src
        /Controllers
            HomeController.php
            AboutController.php
        /Services
            ViewRenderer.php
        /Views
            home.html.php
            about.html.php
    /public
        index.php
    /routes.php
    composer.json

Автозагрузчик

{
    "autoload": {
        "psr-4": {
            "App\\": "htdocs/"
        }
    }
}
composer dump-autoload

Шаблон

Шаблон для главной страницы и 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";
    }
}

HomeController

Обрабатывает логику домашней страницы.

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);
    }
}

О контроллере

Обрабатывает логику страницы «О нас».

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

Определяет сопоставление маршрутов с контроллерами.

use App\Controllers\HomeController;
use App\Controllers\AboutController;

// Define the routes in an associative array
return [
    '/' => HomeController::class,
    '/about' => AboutController::class,
];

index.php

Точка входа приложения.

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

Плюсы и минусы

Преимущества

  • Организация: контроллеры являются модульными, каждый из которых обрабатывает определенную страницу.
  • Повторное использование: представления можно повторно использовать на разных контроллерах.
  • Отладка: ошибки легче отслеживать, поскольку каждая страница имеет собственный выделенный контроллер.

Недостатки

  • Увеличенное количество контролеров: крупные проекты могут привести к увеличению числа контролеров, что потребует лучшей организации.
  • Дублирование кода: общая логика контроллеров может повторяться. Это можно смягчить, используя базовый класс контроллера.

Когда использовать шаблон контроллера страницы?

  • Простые системы: лучше всего подходят для веб-приложений малого и среднего размера, где каждая страница имеет определенную логику.
  • Модульные проекты: если вы хотите изолировать логику для упрощения обслуживания.
  • Без фреймворков: идеально подходит для PHP-проектов без надежных фреймворков (таких как Laravel или Symfony).

Для более сложных проектов, где существует значительное повторное использование логики или несколько точек входа, более подходящими могут быть такие шаблоны, как Front Controller или полная архитектура MVC.

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/xxzeroxx/php-design-patterns-page-controller-34f2?1. Если есть какие-либо нарушения, свяжитесь с [email protected], чтобы удалить их.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3