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.