Запросы
Запросы к приложению представляются в виде объектов 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