La clase Request
Mediante el objeto Request, podemos acceder a la informacion asociada con la petición actual. El objeto Request nos permite acceder a todos los datos relacionados con la petición HTTP que llega desde el cliente.
- La URL actual, la URL anterior y el método HTTP de la peticón.
- Los datos del usuario.
- La IP y el navegador cliente.
- El token CSRF.
- Los valores enviados desde formulario vía POST en la petición anterior (para evitar perder los datos en los inputs cuando se producen errores de validación).
- Y más...
El código actualizado, junto con sus comentarios, se encuentra en GitHub en src/app/http/Request.php.
Índice
- Recuperando el objeto
Request. - Propiedades.
- Métodos simples.
- Recuperando la URL.
- Comprobando si llega un parámetro.
- Eliminando un parámetro.
- Recuperando los datos enviados vía POST.
- Recuperando un dato concreto enviado vía POST.
- Recuperando los datos enviados vía GET.
- Recuperando un dato concreto enviado vía GET.
- Recuperando los datos enviados vía Cookies.
- Recuperando un dato concreto enviado vía Cookies.
- Recuperando las cabeceras de la petición.
- Recuperando una cabecera concreta.
- Comprobando las directivas CORS.
Recuperando el objeto Request
Obtener la petición
Para recuperar la instancia del objeto Request, que representa la petición que llega desde el cliente, tenemos distintas manera de hacerlo:
- Con el método estático
Request::retrieve(), que nos retorna la instancia de Request. - Desde un controlador que herede de Controller, podemos hacer
$this->requestpara acceder a la propiedad que contiene la instancia. - Usando el helper
request(). Esta es la opción más simple para recuperarla desde cualquier punto.
Ejemplo
Resultado de la ejecución
Propiedades
Estas son las propiedades públicas del objeto Request. Es posible que en el futuro pasen a ser protegidas, pero de momento se mantienen públicas por temas de compatibilidad con versiones anteriores del Framework.
$user: objeto de clase User con los datos del usuario identificado (o null).$url: URL actual.$method: método HTTP de la petición.$scheme: http o https.$host: nombre de host.$uri: URI completa de la petición.$previousUrl: URL de la petición anterior.$csrfToken: token CSRF para evitar ataques de cross-site-scripting.$ip: IP desde la que se recibe la petición.$userAgent: datos del navegador u otro cliente que hace la petición.$previousInputs: inputs de la petición anterior.
Ejemplo
Resultado de la ejecución
Getters básicos
Estos son algunos de los métodos para recuperar información:
getUser(): devuelve el usuario identificado en la aplicación, o null si no hay ningún usuario identificado. Getter de la propiedad$user.getScheme(): para conocer si se está usando http o https. Getter de la propiedad$schemegetMethod(): recupera el método HTTP de la petición. Getter de la propiedad$method.getHost(): devuelve el nombre del host. Getter de la propiedad$host.getCSRFToken(): devuelve el token CSRF. Getter de la propiedad$csrfToken.getIP(): devuelve la IP desde la que se recibe la petición. Getter de la propiedad$ip.getUserAgent(): devuelve los datos del navegador u otro cliente que hace la petición. Getter de la propiedad$userAgent.getPreviousInputs(): devuelve los inputs de la petición anterior. Getter de la propiedad$previousInputs.
Ejemplo
Resultado de la ejecución
Métodos para trabajar con la URL
Estos son algunos de los métodos para trabajar con URLs:
getUrl(): recupera la URL actual. Getter de la propiedad $url.sameAsPrevious(): nos permite saber si se está realizando una petición a la misma URL que la petición anterior (Refresh).urlHas(): para saber si la URL contiene una determinada cadena de texto.urlBeginsWith(): permmite saber si la URL comienza por una determinada cadena de texto.getUri(): URI completa.
Ejemplo
Resultado de la ejecución
Métodos para recuperar información de la petición
has()
El método has() permite saber si llega un dato con un nombre concreto por GET, POST o COOKIE.
Recibe como primer parámetro el nombre del dato a buscar y como segundo parámetro el método de la petición (GET, POST, COOKIE), si no
se indica será POST por defecto.
Prueba a hacer clic en el siguiente enlace para añadir un parámetro a la URL y luego vuelve a hacer clic para eliminarlo:
Ejemplo
Resultado de la ejecución
forget()
El método forget() permite eliminar un dato con un nombre concreto de la variable superglobal $_GET, $_POST o $_COOKIE.
Recibe como primer parámetro el método de la petición (GET, POST, COOKIE) y como segundo parámetro el nombre del dato a borrar.
Si no se indica el segundo parámetro, se eliminarán todos los datos de la superglobal indicada. Ten cuidado con esto.
Ejemplo
Métodos para recuperar los datos enviados desde formularios
posts()
El método posts() permite recuperar todos los datos de la variable superglobal $_POST.
Devuelve un array asociativo con las mismas claves que la variable superglobal $_POST y los valores saneados.
Ejemplo
Resultado de la ejecución
post()
El método post() permite recuperar un dato con un nombre concreto de la variable superglobal $_POST.
Recibe como primer parámetro el nombre del dato a recuperar y como segundo parámetro el valor por defecto en caso de que no exista.
Si no hay valor por defecto y el dato no existe, se devolverá null.
Su uso es muy común para recuperar los datos enviados desde un formulario vía POST.
Ten en cuenta que este método devuelve los datos filtrados y saneados, con lo que es seguro para mostrar directamente en la vista sin necesidad de aplicar ningún filtro adicional. A pesar de que la recomendación es no sanear los datos antes de mostrarlos, en este framework se hace así puesto que es usado con fines docentes y es más seguro.
Ejemplo
Resultado de la ejecución
Métodos para recuperar los datos enviados desde la URL
gets()
El método gets() permite recuperar todos los datos de la variable superglobal $_GET filtrados y saneados.
No recibe ningún parámetro.
Prueba a hacer clic en el siguiente enlace para añadir un parámetro a la URL y luego vuelve a hacer clic para eliminarlo:
Ejemplo
Resultado de la ejecución
get()
El método get() permite recuperar un dato con un nombre concreto de la variable superglobal $_GET.
Recibe como primer parámetro el nombre del dato a recuperar y como segundo parámetro el valor por defecto en caso de que no exista.
Si no hay valor por defecto y el dato no existe, se devolverá null.
Su uso es muy común para recuperar los datos de la Query String de la URL.
Ten en cuenta que este método devuelve los datos filtrados y saneados, con lo que es seguro para mostrar directamente en la vista sin necesidad de aplicar ningún filtro adicional. A pesar de que la recomendación es no sanear los datos antes de mostrarlos, en este framework se hace así puesto que es usado con fines docentes y es más seguro.
Ejemplo
Resultado de la ejecución
Métodos para recuperar los datos desde Cookies
Recupera todos los datos
all()
El método all() permite recuperar todos los datos de las variables superglobales
$_POST, $_GET y $_COOKIE (con esa prioridad ante claves repetidas) filtrados y saneados.
No recibe ningún parámetro.
Ejemplo
Resultado de la ejecución
Métodos para trabajar con cabeceras HTTP
headers()
El método headers() permite recuperar las cabeceras de la petición HTTP.
No recibe ningún parámetro.
Ejemplo
Resultado de la ejecución
header()
El método header() permite recuperar una cabecera HTTP concreta.
Recibe como primer parámetro el nombre de la cabecera a recuperar y como segundo parámetro el valor por defecto en caso de que no exista.
Si no hay valor por defecto y el dato no existe, se devolverá null.
Ejemplo
Resultado de la ejecución
Recuperando fichers enviados desde formularios
file()
El método file() permite recuperar un fichero enviado desde un formulario.
Recibe como parámetro el nombre del input del formulario. El fichero recuperado, es un objeto de
tipo UploadedFile, así que es importante consultar
la documentación de esa clase UploadedFile.
Ejemplo
imageFile()
El método imageFile() permite recuperar una imagen enviada desde un formulario.
Recibe como parámetro el nombre del input del formulario. La imagen recuperada,
es un objeto de tipo UploadedImage, así que es importante consultar
la documentación de esa clase UploadedImage.
Ejemplo
CORS
allowedByCors()
Este método permite saber si la petición es permitida por las directivas CORS, tal y como se ha configurado en el archivo de configuración config.php.
Ejemplo
Resultado de la ejecución
Más ejemplos
Consultad los siguientes enlaces:
- TODO.