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 get() e 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 componente request, 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âmetros POST, PUT, PATCH e etc são enviados no corpo da requisição. O componente request 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 coleção de cabeçalho 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 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;