Компонент управления запросами (Request Handler component) используется в Cake чтобы определять информацию о поступающих HTTP запросах. Вы можете использовать его для того, чтобы лучше информировать ваш контроллер о запросах AJAX, получать информацию об IP-адресах удаленных клиентов и типах запросов, или избавляться от нежелательных данных при отображении. Чтобы воспользоваться компонентом управления запросами, вам нужно убедиться, что он определен в вашем масиве контроллера $components.
<? class ThingsController extends AppController { var $components = array('RequestHandler');
// ... } ?>
Получение информации о клиентах/запросах
Давайте просто углубимся:
accepts
string $type
Возвращает информацию о типах контента, который принимает клиент, зависит от значение $type. Если ноль или значение не присвоено, то вернет масив типов контента, которые принимает клиент. Если введена строка, то возвращает true если клиент принимает данный тип, проверяется $type по отношению к карте типов контента (см. setContent()). Если $type это масив, каждая строка проверяется отдельно, и accepts() вернет true если хотя бы одна из них соответствует принимаемому типу контента. Например:
<? class PostsController extends AppController { var $components = array('RequestHandler');
function beforeFilter () { if ($this->RequestHandler->accepts('html')) { // Выполнить код только если клиент принимает HTML (text/html) } elseif ($this->RequestHandler->accepts('rss')) { // Выполнить только код RSS } elseif ($this->RequestHandler->accepts('atom')) { // Выполнить только код Atom } elseif ($this->RequestHandler->accepts('xml')) { // Выполнить только код XML }
if ($this->RequestHandler->accepts(array('xml', 'rss', 'atom'))) { //Выполняется если клиент принимает что-то из: XML, RSS или Atom } } } ?>
getAjaxVersion
Если вы используете библиотеки JS Prototype, эта функция возвращает используемую версию Prototype.
getClientIP
Возвращает IP-адрес удаленного клиента.
getReferrer
Возвращает имя сервера, с которого к вам пришел пользователь.
isAjax
Возвращает true если текущий запрос был XMLHttpRequest.
isAtom
Возвращает true если клиент принимает тип контента Atom (application/atom+xml).
isDelete
Возвращает true елси текущий вопрос проходил через DELETE.
isGet
Возвращает true если текущий запрос проходил через GET.
Возвращает true если текущий запрос проходил через POST.
isPut
Возвращает true если текущий запрос проходил через PUT.
isRss
Возврвщает true если клиент принимает тип контента RSS (application/rss+xml).
isXml
Возвращает true если клиент принимает тип контента XML (application/xml или text/xml).
setContent
string $name
string $type
Добавляет карту псевдонимов типов контента, для использования с accepts() и prefers(), где $name – имя контента (строка), а $type – либо строка, либо масив строк, каждая из которых это MIME. Встроенная карта похожа на следующее:
В разных случаях вам понадобится убрать данные из запроса или из отображения. Воспользуйтесь следующими функциями конпонента управления запросами для этого.
stripAll
string $str
Убирает пробелы, изображения и скрипты из $str (используя stripWhitespace(), stripImages(), и stripScripts()).
stripImages
string $str
Убирает любой код HTML из $str, определяющий изображения.Strips any HTML embedded images from $str.
stripScripts
string $str
Убирает все <script> и <style> теги из $str.
stripTags
string $str
string $tag1
string $tag2...
Убирает теги определенные по $tag1, $tag2, и т.д. из $str.
Компонент управления запросами особенно полезен когда в ваше приложение включены запросы AJAX. Функция setAjax() используется для автоматического определения запросов AJAX и устанавливает размещения контроллера на размещение AJAX для этого запроса. Польза здесь в том что вы можете создать маленькие модульные отображение, которые могут также дублироваться как отображения AJAX.
Когда обычный браузер делает запрос к /things/list, рендерится неупорядоченный список в верстке приложения по умолчанию. Если ссылка запрошена как часть операции AJAX, список автоматически рендерится в верстке AJAX.