Home PageКаталог Изменения НовыеКомментарии Пользователи Регистрация
CakePHP: Manual11/RequestHandler ...

Компонент управления запросами


Оглавление документа

Введение

Компонент управления запросами (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

Добавляет карту псевдонимов типов контента, для использования с 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

Убирает теги определенные по $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.


 
Комментарии
Добавить комментарий:

Файлы [Скрыть файлы/форму]