Содержание

Разбор запроса и определение текущего контроллера и действия

Что мы получаем из запроса?

При получении запроса система должна определить, что она должна сделать. По сути это означает, что необходимо определить на основе Запроса следующие сущности:

Схема разбора запроса в Limb3 приложении

Если вы читали страницу "Использование цепочки фильтров для организации Front-Controller", то уже знаете, что в типичном Limb3 приложении разбор запроса производится в фильтре lmbRequestDispatchingFilter, который получает в конструктор объект диспатчера запросов, реализующий интерфейс lmbRequestDispatcher.

Интерфейс lmbRequestDispatcher состоит из одного метода dispatch($request). Это метод должен возвращать массив параметров, доступных из Запроса.

Обычно массив этих параметров, которые возвращает диспатчер запроса выглядит следующим образом:

  $result = array('controller' => 'newsline', // Note:! under_scores for controller param
                  'action' => 'archive', 
                  'id' => 150);

Из параметров, которые вернул диспатчер запросов, фильтр lmbRequestDispatchingFilter создает объект класса lmbController при помощи метода lmbToolkit :: instance()→createController($controller_name) и ставит ему текущее действие (current action). Для этих целей фильтр использует параметры controller и action (см. пример параметров выше).

Полученный объект $dispatched_controller отдается в тулкит при помощи метода setDispatchedController($controller).

Диспатчер запросов, используемый в WEB_APP по-умолчанию

В пакете WEB_APP доступен класс lmbRoutesRequestDispatcher, реализующий интерфейс lmbRequestDispatcher. Именно он используется по-умолчания как диспатчер запросов в туториалах.

lmbRoutesRequestDispatcher опирается на класс lmbRoutes, который используется для получения параметров из строк исходя из определенных паттернов (идея класса lmbRoutes была взята из Ruby on Rails фреймворка, ее сейчас можно встретить в различных фреймворках, например, в Zend framework).

Архитектура подсистемы разбора запроса

Файлы классов и интерфейсов подсистемы разбора запроса можно найти в папке limb/web_app/src/request

}

}