Введение

Понятие "обработка запросов" означает, что Ирокез должен:

  1. принять запрос пользователя (состоящего из URL, протокола, HTTP-метода и других параметров)
  2. определить требуемый ресурс (к примеру: новость, раздел галереи, запись блога)
  3. найти и сгенерировать необходимые данные (запросить базу данных о нужной новости, разделу или записи блога)
  4. оформить ресурс в нужном виде (оформить в виде HTML документа или RSS ленты)
  5. выдать ресурс пользователю (добавить необходимые HTTP-заголовки, сжать данные и т.д.)

Алгоритм можно представить в следующем виде:

  • Принятие пользовательского запроса выполняет сначала загрузчик системы (loader.php), а затем маршрутизатор Router (пункт 1).
  • Маршрутизатор должен определить параметры запроса, установить переменные окружения (строку запроса, язык пользователя), а затем попытаться определить требуемый ресурс через набор имеющихся маршрутов - Routes.
  • Маршрут (Route), исходя из заданной строки запроса, пытается определить и найти соответствующий обработчик - Controller (пункт 2). В случае, если обработчик найден, то остальная работа предоставляется ему, на этом работа маршрута заканчивается.
  • Если маршрут не смог найти обработчик, то он сообщает об этом маршрутизатору и тот передает запрос следующему маршруту в наборе.
  • Если ни один из маршрутов не нашел обработчик, то маршрутизатор подключает маршрут ошибок, который вызывает соответствующий обработчик ошибки (к примеру обработчик страницы 404).
  • В случае, если и маршрут ошибок не смог подключить обработчик, то маршрутизатор сам обрабатывает ошибку и выдает сообщение пользователю (к примеру "Error 404. Not found.").
  • Обработчик запроса, или контроллер, должен сформировать требуемый ресурс и вернуть его маршрутизатору (пункт 3 и 4).
  • Маршрутизатор возвращает результат работы обработчика загрузчику, который выполняет остальные необходимые действия и выдает страницу пользователю (пункт 5).

Маршрутизатор

Маршрутизатор (Router) инициализируется при старте системы. Следующие методы являются публичными:

  • Router::getRequest() - вызывает при инициализации из объекта Framework. Метод обрабатывает альтернативные методы HTTP-запросов, такие как PUT и DELETE, необходимые для REST архитектуры
  • Router::addRoute(Route $Router) - добавить маршрут в набор маршрутов
  • Router::route() - осуществляет маршрутизацию и вызывается из загрузчика

Маршрут

Маршрут - это класс, производный от абстрактного класса BaseRoute. Функция маршрута состоит в принятии запроса и выдаче обработчика или сообщении об отсутствии соответсвующего обработчика через метод BaseRoute::follow(string $query). При этом каждый определенный маршрут должен имплементировать метод Route::getController(string $query) - который определяет метод нахождения контроллера.