====== Разбор запроса и определение текущего сервиса и действия ====== ===== Что мы получаем из запроса? ===== При получении запроса система должна определить, что она должна сделать. По сути это означает, что необходимо определить на основе Запроса следующие сущности: * **[[lmbService|lmbService]]** - сервис. По сути система представляет какой-либо сервис пользователю. lmbService "знает", какая команда относится к тому или иному действию, а также прочие характеристики действия (уровень прав доступа, иконка и т.д. - зависит от проекта и пакетов, которые в нем использованы). * **Action** - действие, которое сервис должен выполнить. ===== Какие понятия связаны с разбором запроса? ===== Сам разбор запроса производится в фильтре [[lmbRequestDispatchingFilter|lmbRequestDispatchingFilter]], который получает в конструкторе объект, реализующий интерфейс [[lmbRequestDispatcher|lmbRequestDispatcher]], который состоит из одного метода dispatch($request). Это метод должен возвращать массив параметров, доступных из Запроса. Из параметров, которые вернул lmbRequestDispatcher :: dispatch($request) метод, фильтр [[lmbRequestDispatchingFilter|lmbRequestDispatchingFilter]] создает объект класса [[lmbDispatchedRequest|lmbDispatchedRequest]], который хранит текущий [[lmbService|Сервис]] и текущее действие. Имя сервиса и действия может находится в массиве параметров, возвращаемых из dispatch() метода, например: $result = array('service' => 'Newsline', 'action' => 'archive', 'id' => 150); В базовом пакете доступен класс [[lmbRoutesRequestDispatcher|lmbRoutesRequestDispatcher]], реализующий интерфейс [[lmbRequestDispatcher|lmbRequestDispatcher]]. [[lmbRoutesRequestDispatcher|lmbRoutesRequestDispatcher]] опирается на класс [[lmbRoutes|lmbRoutes]], который используется для получению параметров из строк исходя из определенных паттернов (идея [[lmbRoutes|lmbRoutes]] была взята из Ruby on Rails фреймворка). ===== UML диаграммы ===== ==== Статическая диаграмма классов ==== {{{ limb:architecture:limb3.0_request_dispatch.png }}} ==== Диаграмма последовательностей ==== {{{ limb:architecture:limb3.0_rdispatch_sequence.png }}}