7.2 KiB
Requisições
As requisições realizadas na aplicação são representadas pelo objeto yii\web\Request
que fornece informações como os parâmetros da requisição, cabeçalhos HTTP, cookies
e etc. Em uma determinada requisição, você pode acessar o objeto da requisição
correspondente através do componente da aplicação
request
, que é uma instância de yii\web\Request, por padrão. Nesta seção,
descreveremos como você pode usar este componente em sua aplicação.
Parâmetros da Requisição
Para obter os parâmetros da requisição, você pode chamar os métodos
yii\web\Request::get() e yii\web\Request::post() do
componente request
. Estes métodos retornam os valores de $_GET
e $_POST
,
respectivamente. Por exemplo,
$request = Yii::$app->request;
$get = $request->get();
// equivalente à: $get = $_GET;
$id = $request->get('id');
// equivalente à: $id = isset($_GET['id']) ? $_GET['id'] : null;
$id = $request->get('id', 1);
// equivalente à: $id = isset($_GET['id']) ? $_GET['id'] : 1;
$post = $request->post();
// equivalente à: $post = $_POST;
$name = $request->post('name');
// equivalente à: $name = isset($_POST['name']) ? $_POST['name'] : null;
$name = $request->post('name', '');
// equivalente à: $name = isset($_POST['name']) ? $_POST['name'] : '';
Informação: Ao invés de acessar diretamente o
$_GET
e o$_POST
para recuperar os parâmetros da requisição, é recomendável que os utilizem através do componenterequest
, como mostrado nos exemplos acima. Isto permite que você escreva testes de forma mais simples, utilizando um componente da requisição que retornem valores pré-determinados.
Ao implementar o RESTful APIs, muitas vezes você precisará recuperar os parâmetros que foram enviados pelos métodos de requisição PUT, PATCH ou outro. Você pode recuperá-los chamando o método yii\web\Request::getBodyParam(). Por exemplo,
$request = Yii::$app->request;
// retorna todos os parâmetros
$params = $request->bodyParams;
// retorna o parâmetro "id"
$param = $request->getBodyParam('id');
Informação: Tirando os parâmetros
GET
, os parâmetrosPOST
,PUT
,PATCH
e etc são enviados no corpo da requisição. O componenterequest
analisará estes parâmetros quando você acessá-los através dos métodos descritos acima. Você pode personalizar a forma como estes parâmetros são analisados pela configuração da propriedade yii\web\Request::parsers.
Métodos da Requisição
Você pode obter o método HTTP usado pela requisição atual através da expressão
Yii::$app->request->method
. Um conjunto de propriedades booleanas também são
fornecidos para que você consiga verificar se o método atual é o correto.
Por exemplo,
$request = Yii::$app->request;
if ($request->isAjax) { /* a requisição é uma requisição Ajax */ }
if ($request->isGet) { /* o método da requisição é GET */ }
if ($request->isPost) { /* o método da requisição é POST */ }
if ($request->isPut) { /* o método da requisição é PUT */ }
URLs da Requisição
O componente request
fornece muitas formas de inspecionar a atual URL da requisição.
Assumindo que a URL da requisição seja http://example.com/admin/index.php/product?id=100
,
você pode obter várias partes desta URL através das propriedades explicadas a seguir:
- yii\web\Request::url: retorna
/admin/index.php/product?id=100
, que é a URL sem as informações de protocolo e de domínio. - yii\web\Request::absoluteUrl: retorna
http://example.com/admin/index.php/product?id=100
, que é a URL completa, incluindo as informações de protocolo e de domínio. - yii\web\Request::hostInfo: retorna
http://example.com
, que são as informações de protocolo e de domínio da URL. - yii\web\Request::pathInfo: retorna
/product
, que é a informação depois do script de entrada e antes da interrogação (da query string). - yii\web\Request::queryString: retorna
id=100
, que é a informação depois da interrogação. - yii\web\Request::baseUrl: retorna
/admin
, que é a informação depois do domínio e antes do script de entrada. - yii\web\Request::scriptUrl: retorna
/admin/index.php
, que é a informação depois do domínio até o script de entrada, inclusive. - yii\web\Request::serverName: retorna
example.com
, que é o domínio da URL. - yii\web\Request::serverPort: retorna 80, que é a porta usada pelo servidor Web.
Cabeçalho HTTP
Você pode obter as informações do cabeçalho HTTP através da yii\web\HeaderCollection retornado pela propriedade yii\web\Request::headers. Por exemplo,
// $headers é um objeto de yii\web\HeaderCollection
$headers = Yii::$app->request->headers;
// retorna o valor do cabeçalho Accept
$accept = $headers->get('Accept');
if ($headers->has('User-Agent')) { /* existe o cabeçalho User-Agent */ }
O componente request
também fornece suporte para fácil acesso de alguns
cabeçalhos mais utilizados, incluindo:
- yii\web\Request::userAgent: retorna o valor do cabeçalho
User-Agent
. - yii\web\Request::contentType: retorna o valor do cabeçalho
Content-Type
que indica o tipo MIME dos dados do corpo da requisição. - yii\web\Request::acceptableContentTypes: retorna os tipos MIME acessíveis pelos usuários. Os tipos retornados são ordenados pela sua pontuação de qualidade. Tipos com mais pontuação aparecerão nas primeiras posições.
- yii\web\Request::acceptableLanguages: retorna os idiomas acessíveis pelos usuários. Os idiomas retornados são ordenados pelo nível de preferência. O primeiro elemento representa o idioma de maior preferência.
Se a sua aplicação suportar diversos idiomas e quiser exibir páginas no idioma de maior preferência do usuário, você pode usar o método de negociação yii\web\Request::getPreferredLanguage(). Este método pega uma lista de idiomas suportadas pela sua aplicação e compara com yii\web\Request::acceptableLanguages, para retornar o idioma mais adequado.
Dica: Você também pode utilizar o filtro yii\filters\ContentNegotiator para determinar dinamicamente qual tipo de conteúdo e idioma que deve ser utilizado na resposta. O filtro implementa negociação de conteúdo em cima das propriedades e métodos descritos acima.
Informações do Cliente
Você pode obter o nome do domínio ou endereço IP da máquina do cliente através das propriedades yii\web\Request::userHost e yii\web\Request::userIP, respectivamente. Por exemplo,
$userHost = Yii::$app->request->userHost;
$userIP = Yii::$app->request->userIP;