Инструменты пользователя

Инструменты сайта


limb3:ru:packages:web_app:request_dispatching

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

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

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

  • Контроллер (page controller). Контроллер определяет как бы предметную принадлежность запроса.
  • Action - действие, которое контролер должен выполнить. Действие конкретизирует задачу для приложения.

Схема разбора запроса в 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

}

}

Обсуждение

Ваш комментарий. Вики-синтаксис разрешён:
   __  ___   ___   _   __ __  __   _  __
  /  |/  /  / _ | | | / / \ \/ /  | |/_/
 / /|_/ /  / __ | | |/ /   \  /  _>  <  
/_/  /_/  /_/ |_| |___/    /_/  /_/|_|
 
limb3/ru/packages/web_app/request_dispatching.txt · Последние изменения: 2010/11/10 10:02 (внешнее изменение)