Yii2 yii app request

Вместо того, чтобы напрямую обращаться к переменным $_GET и $_POST для получения параметров запроса, рекомендуется обращаться к ним через компонент request. Рассмотрим таблицу с примерами:

Примеры Эквивалент
$request = Yii::$app->request;
$get = $request->get();
вызов метода $_GET()
$get = $_GET;
$request = Yii::$app->request;
$get = $request->get(‘id’);
вызов метода $_GET() c параметром
$ ] : null;
$request = Yii::$app->request;
$get = $request->get(‘id’, 10);
вызов метода $_GET() c параметром
$ ] : 10;
$request = Yii::$app->request;
$get = $request->post);
вызов метода $_POST()
$post = $_POST;
$request = Yii::$app->request;
$get = $request->post(‘id’);
вызов метода $_POST() c параметром
$ ] : null;
$request = Yii::$app->request;
$get = $request->post(‘id’, 10);
вызов метода $_POST() c параметром
$ ] : 10;

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

Для проверки типов запросов используюем следующие методы:

Примеры Результат
Yii::$app->request->method
Определяем тип запроса
Get или Post или AJAX или PUT или .
Yii::$app->request->isAjax
Является ли текущий запрос Ajax запросом
True или False
Yii::$app->request->isConsoleRequest
Является ли запрос консольным
True или False
Yii::$app->request->isDelete
Является ли запрос запросом на удаленние
True или False
Yii::$app->request->isFlash
Является ли запрос Flash запросом
True или False
Yii::$app->request->isGet
Является ли текущий запрос Get запросом
True или False
Yii::$app->request->isHead
Является ли запрос Head запросом
True или False
Yii::$app->request->isOptions
Является ли запрос Options запросом
True или False
Yii::$app->request->isPatch
Является ли запрос Patch запросом
True или False
Yii::$app->request->isPjax
Является ли запрос Pjax запросом
True или False
Yii::$app->request->isPost
Является ли текущий запрос Post запросом
True или False
Yii::$app->request->isPut
Является ли текущий запрос Put запросом
True или False
Yii::$app->request->isSecureConnection
Осуществаялется ли запрос по защищенному соединению
True или False

Ссылки запроса и Http заголовки

Приведем еще несколько примеров полезных методов:

Запросы, поданные в приложение, представлены в терминах объектов yiiwebRequest objects , которые предоставляют информацию, такую как параметры запроса, заголовки HTTP, файлы cookie и т. д. Для данного запроса вы можете получить доступ к соответствующему объекту запроса через компонент приложения request, который является экземпляром yiiwebRequest , по умолчанию.

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

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

При внедрении API-интерфейсов RESTful часто требуется получить параметры, которые отправляются через PUT , PATCH или другие методы запроса. Вы можете получить эти параметры, вызывая методы yiiwebRequest::getBodyParam() . Например:

Читайте также:  Игра на паскале abc код

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

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

Запросить URL-адреса

Компонент request предоставляет множество способов проверки запрашиваемого URL. Предполагая, что запрашиваемый URL — это http://example.com/admin/index.php/product? >, вы можете получить различные части этого URL, которые суммируются в следующем:

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

Заголовки HTTP

Вы можете получить информацию заголовка HTTP через коллекцию заголовков, возвращенную свойством yiiwebRequest::$headers . Например:

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

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

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

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

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

Запросы, сделанные к приложению, представлены в терминах yiiwebRequest объектов, которые предоставляют информацию о параметрах запроса, HTTP заголовках, cookies и т.д. Для получения доступа к текущему запросу вы должны обратиться к объекту request application component, который по умолчанию является экземпляром yiiwebRequest.

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

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

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

При реализации RESTful API, зачастую вам требуется получить параметры, которые были отправлены через PUT, PATCH или другие методы запроса. Вы можете получить эти параметры, вызвав метод yiiwebRequest::getBodyParam(). Например,

Info: В отличии от GET параметров, параметры, которые были переданы через POST , PUT , PATCH и д.р. отправляются в теле запроса. Компонент request будет обрабатывать эти параметры, когда вы попробуете к ним обратиться через методы, описанные выше. Вы можете настроить способ обработки этих параметров через настройку свойства yiiwebRequest::parsers.

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

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

Читайте также:  Geforce gtx 1080 видео

URL запроса #

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

Если предположить, что URL запроса будет http://example.com/admin/index.php/product? >, то вы можете получить различные части этого адреса так как это показано ниже:

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

HTTP заголовки #

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

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

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

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

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

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

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

Читайте также:  Php read file by lines

Доверенные прокси и заголовки #

В предыдущем разделе вы видели, как получить информацию о пользователе, такую как хост и IP-адрес. Это будет работать из коробки в обычной установке, где один веб-сервер используется для обслуживания веб-сайта. Однако если ваше приложение работает за обратным прокси-сервером, вам нужно дополнить конфигурацию, поскольку клиентом теперь является прокси-сервер, а IP-адрес пользователя передаётся приложению с помощью заголовка, установленного им.

Вы не должны слепо доверять заголовкам, предоставленным прокси, если вы явно не доверяете прокси. Начиная с 2.0.13, Yii поддерживает настройку доверенных прокси через следующие свойства компонента request : trustedHosts, secureHeaders, ipHeaders и secureProtocolHeaders

Ниже приведена конфигурация компонента request для приложения, которое работает за рядом обратных прокси, которые расположены в IP-сети 10.0.2.0/24 :

IP-адрес, по умолчанию, отправляется прокси-сервером в заголовке X-Forwarded-For , а протокол ( http или https ) отправляется в X-Forwarded-Proto . Если ваши прокси используют другие заголовки, вы можете использовать конфигурацию компонента request для их настройки, например:

В приведенной выше конфигурации все заголовки, перечисленные в secureHeaders , отфильтровываются из запроса, кроме заголовков X-ProxyUser-Ip и Front-End-Https в случае, если запрос создан прокси. В этом случае, первый используется для получения IP-адреса пользователя, настроенного в ipHeaders , а последний будет использоваться для определения результата yiiwebRequest::getIsSecureConnection().