10 KiB
		
	
	
	
	
	
	
	
			
		
		
	
	Запросы
Запросы, сделанные к приложению, представлены в терминах yii\web\Request объектов, которые предоставляют информацию о параметрах запроса, HTTP заголовках, cookies и т.д. Для получения доступа к текущему запросу вы должны обратиться к объекту request application component, который по умолчанию является экземпляром yii\web\Request.
Параметры запроса
Чтобы получить параметры запроса, вы должны вызвать методы yii\web\Request::get() и yii\web\Request::post() компонента request. Они возвращают значения переменных $_GET и $_POST соответственно. Например,
$request = Yii::$app->request;
$get = $request->get(); 
// эквивалентно: $get = $_GET;
$id = $request->get('id');   
// эквивалентно: $id = isset($_GET['id']) ? $_GET['id'] : null;
$id = $request->get('id', 1);   
// эквивалентно: $id = isset($_GET['id']) ? $_GET['id'] : 1;
$post = $request->post(); 
// эквивалентно: $post = $_POST;
$name = $request->post('name');   
// эквивалентно: $name = isset($_POST['name']) ? $_POST['name'] : null;
$name = $request->post('name', '');   
// эквивалентно: $name = isset($_POST['name']) ? $_POST['name'] : '';
Info: Вместо того, чтобы обращаться напрямую к переменным
$_GETи$_POSTдля получения параметров запроса, рекомендуется чтобы вы обращались к ним через компонентrequestкак было показано выше. Это упростит написание тестов, поскольку вы можете создать mock компонент запроса с не настоящими данными запроса.
При реализации RESTful API, зачастую вам требуется получить параметры, которые были отправлены через PUT, PATCH или другие методы запроса. Вы можете получить эти параметры, вызвав метод yii\web\Request::getBodyParam(). Например,
$request = Yii::$app->request;
// возвращает все параметры
$params = $request->bodyParams;
// возвращает параметр "id"
$param = $request->getBodyParam('id');
Info: В отличии от
GETпараметров, параметры, которые были переданы черезPOST,PUT,PATCHи д.р. отправляются в теле запроса. Компонентrequestбудет обрабатывать эти параметры, когда вы попробуете к ним обратиться через методы, описанные выше. Вы можете настроить способ обработки этих параметров через настройку свойства yii\web\Request::parsers.
Методы запроса
Вы можете получить названия HTTP метода, используемого в текущем запросе, обратившись к выражению  Yii::$app->request->method.
Также имеется целый набор логических свойств для проверки соответствует ли текущий метод определённому типу запроса.
Например,
$request = Yii::$app->request;
if ($request->isAjax) { /* текущий запрос является AJAX запросом */ }
if ($request->isGet)  { /* текущий запрос является GET запросом */ }
if ($request->isPost) { /* текущий запрос является POST запросом */ }
if ($request->isPut)  { /* текущий запрос является PUT запросом */ }
URL запроса
Компонент request предоставляет множество способов изучения текущего запрашиваемого URL.
Если предположить, что URL запроса будет http://example.com/admin/index.php/product?id=100, то вы можете получить различные части этого адреса так как это показано ниже:
- yii\web\Request::url: вернёт адрес /admin/index.php/product?id=100, который содержит URL без информации об имени хоста.
- yii\web\Request::absoluteUrl: вернёт адрес http://example.com/admin/index.php/product?id=100, который содержит полный URL, включая имя хоста.
- yii\web\Request::hostInfo: вернёт адрес http://example.com, который содержит только имя хоста.
- yii\web\Request::pathInfo: вернёт адрес /product, который содержит часть между адресом начального скрипта и параметрами запроса, которые идут после знака вопроса.
- yii\web\Request::queryString: вернёт адрес id=100, который содержит часть URL после знака вопроса.
- yii\web\Request::baseUrl: вернёт адрес /admin, который является частью URL после информации о хосте и перед именем входного скрипта.
- yii\web\Request::scriptUrl: вернёт адрес /admin/index.php, который содержит URL без информации о хосте и параметрах запроса.
- yii\web\Request::serverName: вернёт адрес example.com, который содержит имя хоста в URL.
- yii\web\Request::serverPort: вернёт 80, что является адресом порта, который использует веб-сервер.
HTTP заголовки
Вы можете получить информацию о HTTP заголовках через yii\web\HeaderCollection, возвращаемыми свойством yii\web\Request::headers. Например,
// переменная $headers является объектом yii\web\HeaderCollection 
$headers = Yii::$app->request->headers;
// возвращает значения заголовка Accept
$accept = $headers->get('Accept');
if ($headers->has('User-Agent')) { /* в запросе есть заголовок User-Agent */ }
Компонент request также предоставляет доступ к некоторым часто используемым заголовкам, включая
- yii\web\Request::userAgent: возвращает значение заголовка User-Agent.
- yii\web\Request::contentType: возвращает значение заголовка Content-Type, который указывает на MIME тип данных в теле запроса.
- yii\web\Request::acceptableContentTypes: возвращает список MIME типов данных, которые принимаются пользователем. Возвращаемый список типов будет отсортирован по показателю качества. Типы с более высокими показателями будут первыми в списке.
- yii\web\Request::acceptableLanguages: возвращает языки, которые поддерживает пользователь. Список языков будет отсортирован по уровню предпочтения. Наиболее предпочитаемый язык будет первым в списке.
Если ваше приложение поддерживает множество языков и вы хотите показать страницу на языке, который предпочитает пользователь, то вы можете воспользоваться языковым методом согласования (negotiation) yii\web\Request::getPreferredLanguage(). Этот метод принимает список поддерживаемых языков в вашем приложении, сравнивает их с yii\web\Request::acceptableLanguages и возвращает наиболее подходящий язык.
Tip: Вы также можете использовать фильтр yii\filters\ContentNegotiator для динамического определения какой тип содержимого и язык должен использоваться в ответе. Фильтр реализует согласование содержимого на основе свойств и методов, описанных выше.
Информация о клиенте
Вы можете получить имя хоста и IP адрес пользователя через свойства yii\web\Request::userHost и yii\web\Request::userIP соответственно. Например,
$userHost = Yii::$app->request->userHost;
$userIP = Yii::$app->request->userIP;
