Spec-Zone.ru › Yii 2.0

Запросы

  1. Параметры запроса
  2. Методы запроса
  3. URL запросов
  4. HTTP-заголовки
  5. Информация о клиенте

Запросы к приложению представляются в виде объектов yii\web\Request, которые предоставляют информацию, такую как параметры запроса, HTTP-заголовки, куки и т. д. Для данного запроса вы можете получить доступ к соответствующему объекту запроса через компонент request компонента приложения, который по умолчанию является экземпляром yii\web\Request. В этом разделе мы опишем, как вы можете использовать этот компонент в своих приложениях.

Параметры запроса

Чтобы получить параметры запроса, вы можете вызвать методы get() и post() компонента request. Они возвращают значения $_GET и $_POST соответственно. Например,

$request = Yii::$app->request;

$get = $request->get();
// equivalent to: $get = $_GET;

$id = $request->get('id');
// equivalent to: $id = isset($_GET['id']) ? $_GET['id'] : null;

$id = $request->get('id', 1);
// equivalent to: $id = isset($_GET['id']) ? $_GET['id'] : 1;

$post = $request->post();
// equivalent to: $post = $_POST;

$name = $request->post('name');
// equivalent to: $name = isset($_POST['name']) ? $_POST['name'] : null;

$name = $request->post('name', '');
// equivalent to: $name = isset($_POST['name']) ? $_POST['name'] : '';

Примечание: Вместо непосредственного доступа к $_GET и $_POST для получения параметров запроса рекомендуется использовать компонент request, как показано выше. Это упростит написание тестов, поскольку вы можете создать эмулируемый компонент запроса с поддельными данными запроса.

При реализации RESTful API вам часто нужно получить параметры, отправленные с помощью PUT, PATCH или других методов запроса. Вы можете получить эти параметры, вызвав метод yii\web\Request::getBodyParam(). Например,

$request = Yii::$app->request;

// returns all parameters
$params = $request->bodyParams;

// returns the parameter "id"
$param = $request->getBodyParam('id');

Примечание: В отличие от параметров GET, параметры, отправленные с помощью POST, PUT, PATCH и т. д., отправляются в теле запроса. Компонент request будет анализировать эти параметры при обращении к ним с помощью описанных выше методов. Вы можете настроить способ анализа этих параметров, настроив свойство yii\web\Request::$parsers.

Методы запроса

Вы можете получить HTTP-метод, используемый текущим запросом, с помощью выражения Yii::$app->request->method. Также предоставляется набор логических свойств для проверки, является ли текущий метод определенного типа. Например,

$request = Yii::$app->request;

if ($request->isAjax) { /* the request is an AJAX request */ }
if ($request->isGet)  { /* the request method is GET */ }
if ($request->isPost) { /* the request method is POST */ }
if ($request->isPut)  { /* the request method is PUT */ }

URL запросов

Компонент request предоставляет множество способов проверки текущего запрошенного URL.

Предположим, что запрашиваемый URL — это http://example.com/admin/index.php/product?id=100, вы можете получить различные части этого URL, как указано ниже:

  • url: возвращает /admin/index.php/product?id=100, что представляет собой URL без части информации о хосте.
  • absoluteUrl: возвращает http://example.com/admin/index.php/product?id=100, что представляет собой полный URL, включая часть информации о хосте.
  • hostInfo: возвращает http://example.com, что представляет собой часть информации о хосте URL.
  • pathInfo: возвращает /product, что представляет собой часть после скрипта входа и перед знаком вопроса (строка запроса).
  • queryString: возвращает id=100, что представляет собой часть после знака вопроса.
  • baseUrl: возвращает /admin, что представляет собой часть после информации о хосте и до имени скрипта входа.
  • scriptUrl: возвращает /admin/index.php, что представляет собой URL без информации о пути и строки запроса.
  • serverName: возвращает example.com, что представляет собой имя хоста в URL.
  • serverPort: возвращает 80, что представляет собой порт, используемый веб-сервером.

HTTP-заголовки

Вы можете получить информацию о HTTP-заголовках через коллекцию заголовков header collection, возвращаемую свойством yii\web\Request::$headers. Например,

// $headers is an object of yii\web\HeaderCollection 
$headers = Yii::$app->request->headers;

// returns the Accept header value
$accept = $headers->get('Accept');

if ($headers->has('User-Agent')) { /* there is User-Agent header */ }

Компонент request также поддерживает быстрый доступ к некоторым часто используемым заголовкам, включая:

  • userAgent: возвращает значение заголовка User-Agent.
  • contentType: возвращает значение заголовка Content-Type, который указывает тип MIME данных в теле запроса.
  • acceptableContentTypes: возвращает типы MIME контента, приемлемые для пользователей. Возвращаемые типы упорядочены по их качеству. Типы с наивысшими баллами будут возвращены в первую очередь.
  • acceptableLanguages: возвращает языки, приемлемые для пользователей. Возвращаемые языки упорядочены по уровню предпочтения. Первый элемент представляет наиболее предпочтительный язык.

Если ваше приложение поддерживает несколько языков и вы хотите отобразить страницы на языке, который наиболее предпочтительно выбирает конечный пользователь, вы можете использовать метод выбора языка yii\web\Request::getPreferredLanguage(). Этот метод принимает список языков, поддерживаемых вашим приложением, сравнивает их со свойством acceptableLanguages и возвращает наиболее подходящий язык.

Подсказка: Вы также можете использовать фильтр ContentNegotiator для динамического определения типа контента и языка, которые должны использоваться в ответе. Фильтр реализует переговорный процесс контента на основе свойств и методов, описанных выше.

Информация о клиенте

Вы можете получить имя хоста и IP-адрес машины клиента соответственно через userHost и userIP. Например,

$userHost = Yii::$app->request->userHost;
$userIP = Yii::$app->request->userIP;

© 2008–2017 by Yii Software LLC
Licensed under the three clause BSD license.
http://www.yiiframework.com/doc-2.0/guide-runtime-requests.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API