Компонент управления запросами
Введение
Компонент управления запросами (Request Handler component) используется в Cake чтобы определять информацию о поступающих HTTP запросах. Вы можете использовать его для того, чтобы лучше информировать ваш контроллер о запросах AJAX, получать информацию об IP-адресах удаленных клиентов и типах запросов, или избавляться от нежелательных данных при отображении. Чтобы воспользоваться компонентом управления запросами, вам нужно убедиться, что он определен в вашем масиве контроллера $components.
<?class ThingsController extends AppController{ var
$components = array('RequestHandler');
// ...}?>
Получение информации о клиентах/запросах
Давайте просто углубимся:
accepts
Возвращает информацию о типах контента, который принимает клиент, зависит от значение $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.
isMobile
Возвращает true, елси строка агента пользователя соответсвует мобильному веб-браузеру.
isPost
Возвращает 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. Встроенная карта похожа на следующее:
<?// Имя => Тип
'js' => 'text/javascript',
'css' => 'text/css',
'html' => 'text/html',
'form' => 'application/x-www-form-urlencoded',
'file' => 'multipart/form-data',
'xhtml' => array('application/xhtml+xml', 'application/xhtml', 'text/xhtml'),
'xml' => array('application/xml', 'text/xml'),
'rss' => 'application/rss+xml',
'atom' => 'application/atom+xml'?>
Избавление от данных
В разных случаях вам понадобится убрать данные из запроса или из отображения. Воспользуйтесь следующими функциями конпонента управления запросами для этого.
stripAll
Убирает пробелы, изображения и скрипты из $str (используя stripWhitespace(), stripImages(), и stripScripts()).
stripImages
Убирает любой код HTML из $str, определяющий изображения.Strips any HTML embedded images from $str.
stripScripts
Убирает все <script> и <style> теги из $str.
stripTags
- string $str
- string $tag1
- string $tag2...
Убирает теги определенные по $tag1, $tag2, и т.д. из $str.
<?$someString
= '<font color="#FF0000"><bold>Foo</bold></font> <em>Bar</em>';echo
$this->RequestHandler->stripTags($someString, 'font', 'bold');// исходящее: Foo <em>Bar</em>?>
stripWhiteSpace
Убирает пробелы из $str.
Другие полезные функции
Компонент управления запросами особенно полезен когда в ваше приложение включены запросы AJAX. Функция setAjax() используется для автоматического определения запросов AJAX и устанавливает размещения контроллера на размещение AJAX для этого запроса. Польза здесь в том что вы можете создать маленькие модульные отображение, которые могут также дублироваться как отображения AJAX.
// list.thtml<ul>
<? foreach ($things as $thing):?>
<li><?php echo $thing;?></li><?endforeach;?>
</ul>
//-------------------------------------------------------------
//Действие "список" моего ThingsController:
function list()
{
$this->RequestHandler->setAjax($this);
$this->set('things', $this->Thing->findAll());
}
?>
Когда обычный браузер делает запрос к /things/list, рендерится неупорядоченный список в верстке приложения по умолчанию. Если ссылка запрошена как часть операции AJAX, список автоматически рендерится в верстке AJAX.