Класс RequestHandlerComponent
Объект запроса для обработки альтернативных HTTP-запросов
Альтернативные HTTP-запросы могут поступать от беспроводных устройств, таких как мобильные телефоны, карманные компьютеры и т. п. Эти устройства не нуждаются в запросах Ajax, и этот компонент может указать, как Cake должен реагировать на разные потребности карманного компьютера и настольного ПК.
- CakeObject
-
Компонент
-
RequestHandlerComponent
Ссылка: https://book.cakephp.org/2.0/en/core-libraries/components/request-handling.html
Авторские права: Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
Лицензия: MIT License
Расположение: Cake/Controller/Component/RequestHandlerComponent.php
Краткое описание свойств
-
$_inputTypeMapprotectedarrayСопоставление расширений и десериализаторов для тел запросов такого типа. По умолчанию отображаются только JSON и XML, используйте RequestHandlerComponent::addInputType()
-
$_renderTypeprotectedШаблон, используемый при отображении заданного типа контента.string -
$_viewClassMapprotectedarrayСопоставление типа и viewClass По умолчанию отображаются только JSON и XML, используйте RequestHandlerComponent::viewClassMap()
-
$ajaxLayoutpublicМакет, который будет переключен для Ajax-запросовstring -
$enabledpublicОпределяет, будут ли вызываться обратные вызовы в этом компонентеboolean -
$extpublicСодержит расширение файла, проанализированное маршрутизаторомstring - Содержит ссылку на Controller::$request
$requestpublic - Содержит ссылку на Controller::$response
$responsepublic
Унаследованные свойства
Краткое описание методов
- __construct() publicКонструктор. Парсит принимаемые типы контента, указанные клиентом, используя HTTP_ACCEPT
- _setExtension() protected
Устанавливает расширение на основе заголовков accept. Сравнивает принятые типы и настроенные расширения. Если существует один общий тип, он назначается как тип ext/content для ответа. Будет установлен тип с наивысшим весом. Если наивысший вес имеет более одного типа, соответствующего расширениям, порядок, в котором указаны расширения, определяет, какой тип будет установлен.
Если html является одним из предпочтительных типов, тип контента не будет установлен, это сделано для предотвращения проблем с браузерами, которые предпочитают html и несколько других типов контента.
- accepts() public
Определяет, какие типы контента принимает клиент. Принятие основано на расширении файла, проанализированном маршрутизатором (если оно есть), и на заголовке HTTP_ACCEPT. В отличие от CakeRequest::accepts(), этот метод полностью работает с сопоставленными типами контента.
Использование:
$this->RequestHandler->accepts(array('xml', 'html', 'json'));Возвращает true, если клиент принимает любой из предоставленных типов.
$this->RequestHandler->accepts('xml');Возвращает true, если клиент принимает xml.
Параметры
- строка|массив
$typeнеобязательно null Может быть null (или без параметра), имя типа строки или массив типов
Возвращает
смешанныйЕсли передан null или нет параметра, возвращает массив типов контента, которые принимает клиент. Если передана строка, возвращает true, если клиент принимает её. Если передан массив, возвращает true, если клиент принимает один или несколько элементов массива.
См. также
RequestHandlerComponent::setContent()
- строка|массив
- addInputType() public
Добавляет новый сопоставленный тип ввода. Сопоставленные типы ввода автоматически преобразуются компонентом RequestHandler во время обратного вызова startup().
- beforeRedirect() public
Обрабатывает (имитирует) перенаправления для запросов Ajax, используя requestAction(). Изменяет $_POST и $_SERVER['REQUEST_METHOD'], чтобы имитировать новый GET-запрос.
- beforeRender() public
Проверяет, может ли ответ считаться отличным в соответствии с заголовками запроса и заголовками кэширования ответа. Если он не изменялся, процесс рендеринга пропускается. И клиент получит пустой ответ с заголовком «304 Not Modified».
- convertXml() public
Вспомогательный метод для парсинга данных xml ввода, из-за отсутствия анонимных функций он находится здесь.
- getAjaxVersion() public
Получает версию Prototype, если вызов является Ajax, в противном случае пустую строку. Библиотека Prototype устанавливает специальный заголовок HTTP «Версия Prototype».
- getClientIP() publicПолучает IP-адрес удаленного клиента
- getReferer() publicПолучает имя сервера, с которого был получен этот запрос
- initialize() public
Проверяет, было ли расширение файла проанализировано маршрутизатором, или если HTTP_ACCEPT_TYPE соответствует только одному типу контента с поддерживаемыми расширениями. Если между поддерживаемыми типами контента и расширениями и запрашиваемыми MIME-типами существует только один соответствующий тип, RequestHandler::$ext устанавливается в это значение.
- isAjax() publicВозвращает true, если текущий HTTP-запрос является Ajax, и false в противном случае
- isAtom() publicВозвращает true, если текущий вызов принимает ответ Atom, и false в противном случае
- isDelete() publicВозвращает true, если текущий вызов является запросом DELETE
- isFlash() publicВозвращает true, если текущий HTTP-запрос поступает от клиента на основе Flash
- isGet() publicВозвращает true, если текущий вызов является запросом GET
- isMobile() public
Возвращает true, если строка user agent соответствует мобильному веб-браузеру или если клиент принимает WAP-контент.
- isPost() publicВозвращает true, если текущий вызов является запросом POST
- isPut() publicВозвращает true, если текущий вызов является запросом PUT
- isRss() publicВозвращает true, если текущий вызов принимает ответ RSS, и false в противном случае
- isSSL() publicВозвращает true, если текущий запрос осуществляется по HTTPS, и false в противном случае.
- isWap() publicВозвращает true, если клиент принимает WAP-контент
- isXml() publicВозвращает true, если текущий вызов принимает XML-ответ, и false в противном случае
- mapAlias() publicСопоставляет псевдоним типа контента обратно с его MIME-типом(ами)
- mapType() publicСопоставляет тип контента обратно с псевдонимом
- prefers() public
Определяет, какие типы контента предпочитает клиент. Если параметры не указаны, возвращается единственный тип контента, который клиент, скорее всего, предпочитает. Если $type является массивом, возвращается первый элемент массива, который клиент принимает. Предпочтение определяется прежде всего расширением файла, проанализированным маршрутизатором, если оно предоставлено, и во-вторых, списком типов контента, предоставленных в HTTP_ACCEPT.
- renderAs() publicУстанавливает макет и пути шаблонов для типа контента, определенного $type.
- requestedWith() publicОпределяет тип контента данных, которые клиент отправил (например, в запросе POST)
- respondAs() public
Устанавливает заголовок ответа на основе имени индекса карты типов. Эта функция оборачивает несколько методов, доступных в CakeResponse. Она также позволяет вам использовать псевдонимы типов контента.
- responseType() publicВозвращает текущий тип ответа (заголовок Content-type) или null, если псевдоним не существует
- setContent() public
Добавляет/устанавливает тип(ы) контента для данного имени. Этот метод позволяет сопоставлять типы контента с дружественными псевдонимами (или расширениями), что позволяет RequestHandler автоматически отвечать на запросы этого типа в методе startup.
- startup() public
Метод startup компонента RequestHandler позволяет использовать несколько автоматических функций, связанных с определением свойств HTTP-запроса, включая:
- viewClassMap() publicГеттер/сеттер для viewClassMap
Детали метода
__construct()source public
__construct( ComponentCollection $collection , array $settings array() )
Конструктор. Парсит принимаемые типы контента, указанные клиентом, используя HTTP_ACCEPT
Параметры
-
ComponentCollection$collection - Объект ComponentCollection.
- массив
$settingsнеобязательно array() - Массив настроек.
Переопределяет
Component::__construct() _setExtension()source protected
_setExtension( )
accepts()source public
accepts( string|array $type null )
addInputType()source public
addInputType( string $type , array $handler )
Добавить новый тип входных данных. Картированные типы входных данных автоматически преобразуются компонентом RequestHandler во время обратного вызова startup().
Параметры
- строка
$type - Псевдоним типа, который преобразуется, например, json
- массив
$handler Массив обработчика для типа. Первый индекс должен быть обратным вызовом обработки, все остальные аргументы должны быть дополнительными параметрами для обработчика.
Исключения
CakeExceptionbeforeRedirect()source public
beforeRedirect( Controller $controller , string|array $url , integer|array $status null , boolean $exit true )
Обрабатывает (имитирует) перенаправления для запросов Ajax с помощью requestAction(). Изменяет $_POST и $_SERVER['REQUEST_METHOD'], чтобы имитировать новый GET-запрос.
Параметры
-
Controller$controller - Ссылка на контроллер
- строка|массив
$url - Строка или массив, содержащий место перенаправления
- целое число|массив
$statusнеобязательно null - HTTP-код состояния для перенаправления
- логическое значение
$exitнеобязательно true - Выход из скрипта, по умолчанию
true.
Переопределяет
Component::beforeRedirect() beforeRender()source public
beforeRender( Controller $controller )
Проверяет, можно ли считать ответ другим, согласно заголовкам запроса и заголовкам кеширования ответа. Если он не был изменён, процесс рендеринга пропускается. И клиент получит пустой ответ с заголовком «304 Not Modified».
Параметры
-
Controller$controller - Экземпляр контроллера.
Возвращает
booleanFalse, если процесс рендеринга должен быть прерван.
Переопределяет
Component::beforeRender() convertXml()source public
convertXml( string $xml )
Вспомогательный метод для парсинга входных данных XML, из-за отсутствия анонимных функций он находится здесь.
Параметры
- строка
$xml - Строка XML.
Возвращает
массивДанные XML в формате массива
getAjaxVersion()source public
getAjaxVersion( )
Получает версию Prototype, если вызов является Ajax, в противном случае пустую строку. Библиотека Prototype устанавливает специальный заголовок «Версия Prototype» HTTP.
Возвращает
строка|логическое значениеВерсия Prototype компонента, вызвавшего запрос, в противном случае false
getClientIP()source public
getClientIP( boolean $safe true )
Получает IP-адрес удалённого клиента
Устаревшее
3.0.0 Используйте $this->request->clientIp() в вашем контроллере.Параметры
- логическое значение
$safeнеобязательно true Используйте safe = false, если вы думаете, что пользователь может изменить заголовок HTTP_CLIENT_IP. Установка $safe = false также будет проверять HTTP_X_FORWARDED_FOR
Возвращает
строкаIP-адрес клиента
getReferer()source public
getReferer( )
Получает имя сервера, с которого был получен этот запрос
Устаревшее
3.0.0 Используйте $this->request->referer() в вашем контроллере.Возвращает
строкаАдрес сервера
initialize()source public
initialize( Controller $controller )
Проверяет, был ли проанализирован расширение файла маршрутизатором, или HTTP_ACCEPT_TYPE соответствует только одному типу содержимого с поддерживаемыми расширениями. Если существует только один соответствующий тип между поддерживаемыми типами содержимого и расширениями, и запрошенными типами MIME, RequestHandler::$ext устанавливается в это значение.
Параметры
-
Controller$controller - Ссылка на контроллер
См. также
Router::parseExtensions()Переопределяет
Component::initialize() isAjax()source public
isAjax( )
Возвращает true, если текущий HTTP-запрос является Ajax, иначе false
Устаревшее
3.0.0 Используйте$this->request->is('ajax') вместо этого.Возвращает
логическое значениеTrue, если вызов Ajax
isAtom()source public
isAtom( )
Возвращает true, если текущий вызов принимает ответ Atom, иначе false
Возвращает
логическое значениеTrue, если клиент принимает ответ RSS
isDelete()source public
isDelete( )
Возвращает true, если текущий вызов является DELETE-запросом
Устаревшее
3.0.0 Используйте $this->request->is('delete') в вашем контроллере.Возвращает
логическое значениеTrue, если вызов DELETE
isFlash()source public
isFlash( )
Возвращает true, если текущий HTTP-запрос поступает от клиента на основе Flash, иначе false
Устаревшее
3.0.0 Используйте$this->request->is('flash') вместо этого.Возвращает
логическое значениеTrue, если вызов от Flash
isGet()source public
isGet( )
Возвращает true, если текущий вызов является GET-запросом
Устаревшее
3.0.0 Используйте $this->request->is('get') в вашем контроллере.Возвращает
логическое значениеTrue, если вызов GET
isMobile()source public
isMobile( )
Возвращает true, если строка user agent соответствует мобильному веб-браузеру или если клиент принимает WAP-содержимое.
Возвращает
логическое значениеTrue, если user agent — мобильный веб-браузер
isPost()source public
isPost( )
Возвращает true, если текущий вызов является POST-запросом
Устаревшее
3.0.0 Используйте $this->request->is('post') в вашем контроллере.Возвращает
логическое значениеTrue, если вызов POST
isPut()source public
isPut( )
Возвращает true, если текущий вызов является PUT-запросом
Устаревшее
3.0.0 Используйте $this->request->is('put') в вашем контроллере.Возвращает
логическое значениеTrue, если вызов PUT
isRss()source public
isRss( )
Возвращает true, если текущий вызов принимает ответ RSS, иначе false
Возвращает
логическое значениеTrue, если клиент принимает ответ RSS
isSSL()source public
isSSL( )
Возвращает true, если текущий запрос осуществляется по протоколу HTTPS, иначе false.
Устаревшее
3.0.0 Используйте$this->request->is('ssl') вместо этого.Возвращает
логическое значениеTrue, если вызов по HTTPS
isWap()source public
isWap( )
Возвращает true, если клиент принимает WAP-содержимое
Возвращает
логическое значениеisXml()source public
isXml( )
Возвращает true, если текущий вызов принимает ответ XML, в противном случае false
Возвращает
booleanTrue, если клиент принимает ответ XML
mapAlias()source public
mapAlias( string|array $alias )
Преобразует псевдоним типа содержимого в MIME-тип(ы)
Параметры
- string|array
$alias - Строковый псевдоним для преобразования в тип содержимого. Или массив псевдонимов для преобразования.
Возвращает
string|nullNull при неопределённом псевдониме. Строковое значение отображённого типа псевдонима. Если псевдоним отображается на несколько типов содержимого, будет возвращён первый.
mapType()source public
mapType( string|array $cType )
Преобразует тип содержимого в псевдоним
Устарело
3.0.0 Используйте $this->response->mapType() в контроллере вместо этого.Параметры
- string|array
$cType - Строка типа содержимого для преобразования или массив типов.
Возвращает
string|arrayПсевдонимы для указанных типов.
prefers()source public
prefers( string|array $type null )
Определяет, какие типы содержимого предпочтительны для клиента. Если параметры не заданы, возвращается единственный тип содержимого, который клиент предпочтительно выбирает. Если $type — массив, возвращается первый элемент массива, который клиент принимает. Предпочтение определяется в первую очередь расширением файла, проанализированным маршрутизатором, если оно предоставлено, и во вторую очередь списком типов содержимого, предоставленным в HTTP_ACCEPT.
Параметры
- string|array
$typeoptional null Необязательный массив "дружественных" имён типов содержимого, например, 'html', 'xml', 'js' и т.д.
Возвращает
mixedЕсли $type равен null или не предоставлен, возвращается первый тип содержимого в списке на основе предпочтения. Если задан один тип, возвращается boolean, указывающий, предпочтительно ли этот тип. Если задан массив типов, возвращается первый предпочтительный тип. Если тип не указан, возвращается первый предпочтительный тип.
См. также
RequestHandlerComponent::setContent()renderAs()source public
renderAs( Controller $controller , string $type , array $options array() )
Устанавливает пути к макету и шаблону для типа содержимого, определённого параметром $type.
Использование:
Отображение ответа как ответа AJAX.
$this->RequestHandler->renderAs($this, 'ajax');
Отображение ответа как файла XML и принудительное сохранение результата как файла для загрузки.
$this->RequestHandler->renderAs($this, 'xml', array('attachment' => 'myfile.xml');
Параметры
-
Controller$controller - Ссылка на объект контроллера
- string
$type - Тип ответа (например: 'ajax')
- array
$optionsoptional array() - Массив опций
См. также
RequestHandlerComponent::setContent()RequestHandlerComponent::respondAs()
requestedWith()source public
requestedWith( string|array $type null )
Определяет тип содержимого данных, отправленных клиентом (например, в запросе POST).
Параметры
- string|array
$typeoptional null - Может быть null (или без параметра), строковым именем типа или массивом типов
Возвращает
mixedЕсли предоставлен один тип, возвращается boolean. Если тип не указан, возвращается сопоставленное значение CONTENT_TYPE. Если предоставлен массив, возвращается первый тип в типе содержимого запроса.
respondAs()source public
respondAs( string|array $type , array $options array() )
Устанавливает заголовок ответа на основе имени индекса отображения типа. Эта функция оборачивает несколько методов, доступных в CakeResponse. Она также позволяет использовать псевдонимы типов содержимого.
Параметры
- string|array
$type Дружественное имя типа, например, 'html' или 'xml', или полный тип содержимого, например, 'application/x-shockwave'.
- array
$optionsoptional array() Если $type — дружественное имя типа, связанное с несколькими типами содержимого, $index используется для выбора типа содержимого.
Возвращает
booleanВозвращает false, если заданное в $type дружественное имя типа не существует в отображении типов или если заголовок Content-type уже был установлен этим методом.
См. также
RequestHandlerComponent::setContent()responseType()source public
responseType( )
Возвращает текущий тип ответа (заголовок Content-type) или null, если псевдоним не существует
Возвращает
mixedСтроковый псевдоним типа содержимого или необработанный тип содержимого, если отображение псевдонима не существует, иначе null
setContent()source public
setContent( string $name , string|array $type null )
Добавляет/устанавливает тип(ы) содержимого для данного имени. Этот метод позволяет сопоставлять типы содержимого с дружественными псевдонимами (или расширениями), что позволяет RequestHandler автоматически реагировать на запросы этого типа в методе startup.
Устарело
3.0.0 Используйте$this->response->type() вместо этого.Параметры
- string
$name - Имя типа содержимого, например, "html", "xml", "css"
- string|array
$typeoptional null Тип содержимого или массив типов содержимого, назначенные имени, например, "text/html" или "application/xml"
startup()source public
startup( Controller $controller )
Метод startup компонента RequestHandler позволяет реализовать несколько автоматических действий, связанных с обнаружением определённых свойств HTTP-запроса, в том числе:
- Отключение рендеринга макета для AJAX-запросов (на основе заголовка HTTP_X_REQUESTED_WITH)
- Если Router::parseExtensions() включён, тип макета и шаблона изменяются в зависимости от проанализированного расширения или заголовка Accept-Type. Например, если запрашивается
controller/action.xml, путь к представлению становитсяapp/View/Controller/xml/action.ctp. Также еслиcontroller/actionзапрашивается сAccept-Type: application/xmlв заголовках, путь к представлению станетapp/View/Controller/xml/action.ctp. Типы макета и шаблона будут меняться только на MIME-типы, распознаваемые CakeResponse. Если вам нужно объявить дополнительные MIME-типы, вы можете сделать это, используя CakeResponse::type() в методе beforeFilter() своих контроллеров. - Если существует помощник с именем, совпадающим с именем расширения, он добавляется в контроллер.
- Если расширение относится к типу, понятный RequestHandler, он установит этот тип содержимого в заголовке ответа.
- Если данные XML отправляются с помощью POST, данные анализируются в XML-объект, который присваивается свойству $data контроллера, которое затем можно сохранить в объект модели.
Параметры
-
Controller$controller - Ссылка на контроллер
Переопределяет
Component::startup() viewClassMap()source public
viewClassMap( array|string $type null , array $viewClass null )
Геттер/сеттер для viewClassMap
Параметры
- array|string
$typeoptional null - Строка типа или массив с форматом
array('type' => 'viewClass')для сопоставления одного или нескольких - array
$viewClassoptional null - Класс представления, который будет использоваться для типа без добавления
View
Возвращает
array|stringВозвращает viewClass, когда задана только строка $type, в противном случае массив viewClassMap
Методы, унаследованные от Component
__get()source public
__get( string $name )
Магический метод для леничной загрузки $components.
Параметры
- string
$name - Имя компонента для получения.
Возвращает
mixedОбъект Component или null.
shutdown()source public
shutdown( Controller $controller )
Вызывается после Controller::render() и перед тем, как вывод будет отправлен в браузер.
Параметры
-
Controller$controller - Контроллер с компонентами для завершения работы
Ссылка
https://book.cakephp.org/2.0/ru/controllers/components.html#Component::shutdownМетоды, унаследованные от CakeObject
_mergeVars()source protected
_mergeVars( array $properties , string $class , boolean $normalize true )
Объединяет свойства этого объекта $property со свойством в определении $class. Значение этого класса для свойства будет объединено поверх $class'.
Это предоставляет часть "DRY-магии" CakePHP. Если вы хотите отключить её, переопределите этот метод как пустую функцию.
Параметры
- массив
$properties - Имя свойств для объединения.
- строка
$class - Класс для объединения свойства с ним.
- булево
$normalizeнеобязательно true - Установите в значение true, чтобы выполнить свойства через Hash::normalize() перед объединением.
_set()source protected
_set( array $properties array() )
Разрешает установить несколько свойств объекта в одной строке кода. Будет устанавливать только свойства, которые являются частью объявления класса.
Параметры
- массив
$propertiesнеобязательно array() - Ассоциативный массив, содержащий свойства и соответствующие значения.
_stop()source protected
_stop( integer|string $status 0 )
Останавливает выполнение текущего скрипта. Оборачивает exit(), что упрощает тестирование.
Параметры
- целое число/строка
$statusнеобязательно 0 - см. http://php.net/exit для значений
dispatchMethod()source public
dispatchMethod( string $method , array $params array() )
Вызывает метод этого объекта с заданными параметрами. Предоставляет ООП-обёртку для call_user_func_array
Параметры
- строка
$method - Имя вызываемого метода
- массив
$paramsнеобязательно array() - Список параметров для использования при вызове $method
Возвращает
mixedРезультат вызова метода
log()source public
log( string $msg , integer $type LOG_ERR , null|string|array $scope null )
Удобный метод для записи сообщения в CakeLog. Дополнительную информацию о записи в лог см. в CakeLog::write().
Параметры
- строка
$msg - Сообщение в логе
- целое число
$typeнеобязательно LOG_ERR - Постоянная типа ошибки. Определена в app/Config/core.php.
- null|строка|массив
$scopeнеобязательно null Область(и), в которой создаётся сообщение в логе. Дополнительную информацию о областях ведения журнала см. в CakeLog::config().
Возвращает
booleanУспех записи в лог
requestAction()source public
requestAction( string|array $url , array $extra array() )
Вызывает метод контроллера из любого места. Может использоваться для подключения контроллеров или связывания плагинов с основным приложением. requestAction может использоваться для возвращения отрисованных представлений или получения возвращаемого значения от действий контроллера.
Под капотом этот метод использует Router::reverse() для преобразования параметра $url в строковый URL. Вы должны использовать форматы URL, совместимые с Router::reverse().
Передача данных POST и GET
Данные POST и GET могут быть смоделированы в requestAction. Используйте $extra['url'] для данных GET. Параметр $extra['data'] позволяет моделировать данные POST.
Параметры
- строка|массив
$url Строковый или массивный URL. В отличие от других массивов URL в CakePHP, этот URL не будет автоматически обрабатывать переданные и именованные аргументы в параметре $url.
- массив
$extraнеобязательно array() если массив содержит ключ "return", он устанавливает AutoRender в значение true. Также может использоваться для отправки данных GET/POST и именованных/переданных аргументов.
Возвращает
mixedБулево значение true или false при успехе/неудачи или содержимое отрисованного действия, если 'return' установлен в $extra.
toString()source public
toString( )
Преобразование CakeObject в строку. Каждый класс может переопределить этот метод по мере необходимости.
Возвращает
строкаИмя этого класса
Подробное описание свойств
$_inputTypeMapsource
protected массив
Сопоставление расширений и десериализаторов для тел запросов данного типа. По умолчанию сопоставляются только JSON и XML, используйте RequestHandlerComponent::addInputType().
array(
'json' => array('json_decode', true)
) $_renderTypesource
protected строка
Шаблон для использования при отрисовке данного типа контента.
null
$_viewClassMapsource
protected массив
Сопоставление типа и viewClass По умолчанию сопоставляются только JSON и XML, используйте RequestHandlerComponent::viewClassMap().
array(
'json' => 'Json',
'xml' => 'Xml'
) $ajaxLayoutsource
public строка
Макет, который будет переключаться для запросов Ajax
См.
RequestHandler::setAjax()'ajax'
$enabledsource
public булево
Определяет, будут ли вызываться обратные вызовы для этого компонента
true
$extsource
public строка
Содержит расширение файла, разобранное Router
См.
Router::parseExtensions()null
© 2005–2017 The Cake Software Foundation, Inc.
Licensed under the MIT License.
CakePHP is a registered trademark of Cake Software Foundation, Inc.
We are not endorsed by or affiliated with CakePHP.
https://api.cakephp.org/2.10/class-RequestHandlerComponent.html