Las peticiones (requests) hechas a una aplicación son representadas como objetos yii\web\Request que proporcionan
información como parámetros de la petición, cabeceras HTTP, cookies, etc. Dada una petición, se puede acceder al
objeto request correspondiente a través del componente de aplicación request
que, por defecto, es una instancia de yii\web\Request. En esta sección se describirá como hacer uso de este
componente en las aplicaciones.
Para obtener los parámetros de la petición, se puede llamar a los métodos get() y
post() del componente request
. Estos devuelven los valores de $_GET
y $_POST
,
respectivamente. Por ejemplo:
$request = Yii::$app->request;
$get = $request->get();
// equivalente a: $get = $_GET;
$id = $request->get('id');
// equivalente a: $id = isset($_GET['id']) ? $_GET['id'] : null;
$id = $request->get('id', 1);
// equivalente a: $id = isset($_GET['id']) ? $_GET['id'] : 1;
$post = $request->post();
// equivalente a: $post = $_POST;
$name = $request->post('name');
// equivalente a: $name = isset($_POST['name']) ? $_POST['name'] : null;
$name = $request->post('name', '');
// equivalente a: $name = isset($_POST['name']) ? $_POST['name'] : '';
Información: En lugar de acceder directamente a
$_GET
y$_POST
para obtener los parámetros de la petición, es recomendable que se obtengan mediante el componenterequest
como en el ejemplo anterior. Esto facilitará la creación de tests ya que se puede simular una componente de request con datos de peticiones personalizados.
Cuando se implementan APIs RESTful, a menudo se necesita obtener parámetros enviados desde el formulario a través de PUT, PATCH u otros métodos de request. Se pueden obtener estos parámetros llamando a los métodos yii\web\Request::getBodyParam(). Por ejemplo:
$request = Yii::$app->request;
// devuelve todos los parámetros
$params = $request->bodyParams;
// devuelve el parámetro "id"
$param = $request->getBodyParam('id');
Información: A diferencia de los parámetros
GET
, los parámetros enviados desde el formulario a través dePOST
,PUT
,PATCH
, etc. se envían en el cuerpo de la petición. El componenterequest
convierte los parámetros cuando se acceda a él a través de los métodos descritos anteriormente. Se puede personalizar la manera en como los parámetros se convierten configurando la propiedad yii\web\Request::$parsers.
Se puede obtener el método HTTP usado por la petición actual a través de la expresión Yii::$app->request->method
. Se
proporcionan un conjunto de propiedades booleanas para comprobar si el método actual es de un cierto tipo. Por ejemplo:
$request = Yii::$app->request;
if ($request->isAjax) { // la request es una request AJAX }
if ($request->isGet) { // el método de la request es GET }
if ($request->isPost) { // el método de la request es POST }
if ($request->isPut) { // el método de la request es PUT }
El componente request
proporciona muchas maneras de inspeccionar la URL solicitada actualmente.
Asumiendo que la URL que se está solicitando es http://example.com/admin/index.php/product?id=100
, se pueden obtener
varias partes de la URL explicadas en los siguientes puntos:
/admin/index.php/product?id=100
, que es la URL sin la parte de información
del host.http://example.com/admin/index.php/product?id=100
, que es
la URL entera, incluyendo la parte de información del host.http://example.com
, que es la parte de información del host
dentro de la URL./product
, que es la parte posterior al script de entrada y
anterior al interrogante (query string)id=100
, que es la parte posterior al interrogante./admin
, que es la parte posterior a la información del host y
anterior al nombre de script de entrada./admin/index.php
, que es la URL sin la información del la ruta
ni la query string.example.com
, que es el nombre del host dentro de la URL.Se pueden obtener la información de las cabeceras HTTP a través de header collection devueltas por la propiedad yii\web\Request::$headers. Por ejemplo:
// $headers es un objeto de yii\web\HeaderCollection
$headers = Yii::$app->request->headers;
// devuelve el valor Accept de la cabecera
$accept = $headers->get('Accept');
if ($headers->has('User-Agent')) { // la cabecera contiene un User-Agent }
El componente request
también proporciona soporte para acceder rápidamente a las cabeceras usadas más comúnmente,
incluyendo:
User-Agen
.Content-Type
que indica el tipo
MIME de los datos del cuerpo de la petición.Si la aplicación soporta múltiples idiomas y se quiere mostrar las páginas en el idioma preferido por el usuario, se puede usar el método de negociación de idioma yii\web\Request::getPreferredLanguage(). Este método obtiene una lista de idiomas soportados por la aplicación, comparados con acceptableLanguages, y devuelve el idioma más apropiado.
Consejo: También se puede usar el filtro ContentNegotiator para determinar diatónicamente el content type y el idioma que debe usarse en la respuesta. El filtro implementa la negociación de contenido en la parte superior de las propiedades y métodos descritos anteriormente.
Se puede obtener el nombre del host y la dirección IP de la máquina cliente a través de userHost y userIP, respectivamente. Por ejemplo:
$userHost = Yii::$app->request->userHost;
$userIP = Yii::$app->request->userIP;
Found a typo or you think this page needs improvement?
Edit it on github !
Signup or Login in order to comment.