В настоящем руководстве мы не будем реализовывать MVC (Модель-Представление-Контроллер). Вообще-то, MVC правильно реализовать на PHP невозможно, по крайней мере, так, как это было изначально задумано. Если нужны подробности, почитайте «Руководство для начинающих по MVC» и последующие посты.

Так что забудьте о MVC и вместо этого озаботьтесь разделением ответственностей.

Нам понадобится описательное имя для классов, обрабатывающих запросы. Здесь я буду называть их контроллеры, потому что они знакомы людям, имеющим опыт работы с фреймворками. Вы также можете называть их Обработчиками (Handlers).

Создайте новую папку внутри папки src/ с именем Controllers. В эту папку мы поместим все наши классы контроллеров. Создайте в ней файл Homepage.php.

<?php declare(strict_types = 1);

namespace Example\Controllers;

class Homepage
{
    public function show()
    {
        echo 'Hello World';
    }
}

Автозагрузчик будет работать только в том случае, если пространство имен класса соответствует пути к файлу, а имя файла соответствует имени класса. Вначале я определил Example как корневое пространство имен приложения, ведущее в папку src/. Теперь давайте изменим роут hello world, чтобы он вместо замыкания вызывал наш новоиспеченный метод класса контроллера. Измените свой Routes.php так:

return [
    ['GET', '/', ['Example\Controllers\Homepage', 'show']],
];

Вместо просто вызываемого объекта вы теперь передаете массив. Первое значение — это имя класса с полным пространством имен, второе — имя метода, который вы хотите вызвать. Чтобы все заработало, придется провести небольшой рефакторинг секции маршрутизации в Bootstrap.php:

case \FastRoute\Dispatcher::FOUND:
    $className = $routeInfo[1][0];
    $method = $routeInfo[1][1];
    $vars = $routeInfo[2];
    
    $class = new $className;
    $class->$method($vars);
    break;

Таким образом, вместо простого вызова метода вы теперь создаете экземпляр объекта, а затем вызываете его метод.

Теперь, если вы посетите http://localhost:8000/, все должно работать. Если нет, возвращайтесь и отлаживайте. И, конечно же, не забудьте зафиксировать изменения.

Источник

Наверх