Компонент управления запросами (Request Handler component) используется в Cake чтобы определять информацию о поступающих HTTP запросах. Вы можете использовать его для того, чтобы лучше информировать ваш контроллер о запросах AJAX, получать информацию об IP-адресах удаленных клиентов и типах запросов, или избавляться от нежелательных данных при отображении. Чтобы воспользоваться компонентом управления запросами, вам нужно убедиться, что он определен в вашем масиве контроллера $components.
<?
class ThingsController extends AppController
{
var $components = array('RequestHandler');
// ...
}
?>
Давайте просто углубимся:
Возвращает информацию о типах контента, который принимает клиент, зависит от значение $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
}
}
}
?>
Если вы используете библиотеки JS Prototype, эта функция возвращает используемую версию Prototype.
Возвращает IP-адрес удаленного клиента.
Возвращает имя сервера, с которого к вам пришел пользователь.
Возвращает true если текущий запрос был XMLHttpRequest.
Возвращает true если клиент принимает тип контента Atom (application/atom+xml).
Возвращает true елси текущий вопрос проходил через DELETE.
Возвращает true если текущий запрос проходил через GET.
Возвращает true, елси строка агента пользователя соответсвует мобильному веб-браузеру.
Возвращает true если текущий запрос проходил через POST.
Возвращает true если текущий запрос проходил через PUT.
Возврвщает true если клиент принимает тип контента RSS (application/rss+xml).
Возвращает true если клиент принимает тип контента XML (application/xml или text/xml).
Добавляет карту псевдонимов типов контента, для использования с 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'
?>
В разных случаях вам понадобится убрать данные из запроса или из отображения. Воспользуйтесь следующими функциями конпонента управления запросами для этого.
Убирает пробелы, изображения и скрипты из $str (используя stripWhitespace(), stripImages(), и stripScripts()).
Убирает любой код HTML из $str, определяющий изображения.Strips any HTML embedded images from $str.
Убирает все <script> и <style> теги из $str.
Убирает теги определенные по $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>
?>
Убирает пробелы из $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.