Documentación
Obtener el objeto de solicitud
Webman inyectará automáticamente el objeto de solicitud en el primer parámetro del método de acción, por ejemplo
Ejemplo
<?php
namespace app\controller;
use support\Request;
class UserController
{
public function hello(Request $request)
{
$default_name = 'webman';
// Obtener el parámetro name de la solicitud GET, si no se pasa name, se devuelve $default_name
$name = $request->get('name', $default_name);
// Devuelve una cadena al navegador
return response('hola ' . $name);
}
}
A través del objeto $request
podemos obtener cualquier dato relacionado con la solicitud.
*A veces queremos obtener el objeto $request
de la solicitud actual en otra clase, en este caso, solo necesitamos usar la función de ayuda request()
;
Obtener parámetros de solicitud GET
Obtener todo el array GET
$request->get();
Si la solicitud no tiene parámetros GET, devuelve un array vacío.
Obtener un valor específico del array GET
$request->get('name');
Si el array GET no contiene este valor, devuelve nulo.
También puedes pasar un segundo parámetro a la función get con un valor predeterminado. Si el valor correspondiente no se encuentra en el array GET, se devuelve el valor predeterminado. Por ejemplo:
$request->get('name', 'tom');
Obtener parámetros de solicitud POST
Obtener todo el array POST
$request->post();
Si la solicitud no tiene parámetros POST, devuelve un array vacío.
Obtener un valor específico del array POST
$request->post('name');
Si el array POST no contiene este valor, devuelve nulo.
Al igual que el método get, también puedes pasar un segundo parámetro a la función post con un valor predeterminado. Si el valor correspondiente no se encuentra en el array POST, se devuelve el valor predeterminado. Por ejemplo:
$request->post('name', 'tom');
Obtener cuerpo de solicitud POST crudo
$post = $request->rawBody();
Esta función es similar a la operación file_get_contents("php://input");
en php-fpm
. Se utiliza para obtener el cuerpo crudo de la solicitud HTTP. Es muy útil para obtener datos de solicitudes POST en formatos no application/x-www-form-urlencoded
.
Obtener encabezados
Obtener todo el array de encabezados
$request->header();
Si la solicitud no tiene encabezados, devuelve un array vacío. Nota que todas las claves están en minúsculas.
Obtener un valor específico del array de encabezados
$request->header('host');
Si el array de encabezados no contiene este valor, devuelve nulo. Nota que todas las claves están en minúsculas.
Al igual que el método get, también puedes pasar un segundo parámetro a la función header con un valor predeterminado. Si el array de encabezados no contiene el valor correspondiente, se devuelve el valor predeterminado. Por ejemplo:
$request->header('host', 'localhost');
Obtener cookies
Obtener todo el array de cookies
$request->cookie();
Si la solicitud no tiene cookies, devuelve un array vacío.
Obtener un valor específico del array de cookies
$request->cookie('name');
Si el array de cookies no contiene este valor, devuelve nulo.
Al igual que el método get, también puedes pasar un segundo parámetro a la función cookie con un valor predeterminado. Si el array de cookies no contiene el valor correspondiente, se devuelve el valor predeterminado. Por ejemplo:
$request->cookie('name', 'tom');
Obtener todas las entradas
Incluye la colección de post
y get
.
$request->all();
Obtener un valor de entrada específico
Obtener un valor específico de la colección de post
y get
.
$request->input('name', $valor_predeterminado);
Obtener datos de entrada parciales
Obtener datos parciales de la colección de post
y get
.
// Obtener un array compuesto por username y password, si la clave correspondiente no existe, se ignora
$only = $request->only(['username', 'password']);
// Obtener todos los datos de entrada excepto avatar y age
$except = $request->except(['avatar', 'age']);
Obtener archivos cargados
Obtener el array completo de archivos cargados
$request->file();
Formulario similar a:
<form method="post" action="http://127.0.0.1:8787/upload/files" enctype="multipart/form-data" />
<input name="file1" multiple="multiple" type="file">
<input name="file2" multiple="multiple" type="file">
<input type="submit">
</form>
El formato devuelto por $request->file()
es similar a:
array (
'file1' => object(webman\Http\UploadFile),
'file2' => object(webman\Http\UploadFile)
)
Es una matriz de instancias de webman\Http\UploadFile
. La clase webman\Http\UploadFile
hereda de la clase [SplFileInfo
] (https://www.php.net/manual/zh/class.splfileinfo.php) nativa de PHP y proporciona algunos métodos útiles.
<?php
namespace app\controller;
use support\Request;
class UploadController
{
public function files(Request $request)
{
foreach ($request->file() as $clave => $spl_file) {
var_export($spl_file->isValid()); // Si el archivo es válido, por ejemplo, true|false
var_export($spl_file->getUploadExtension()); // Extensión del archivo cargado, por ejemplo, 'jpg'
var_export($spl_file->getUploadMimeType()); // Tipo MIME del archivo cargado, por ejemplo, 'image/jpeg'
var_export($spl_file->getUploadErrorCode()); // Obtener el código de error de carga, por ejemplo, UPLOAD_ERR_NO_TMP_DIR, UPLOAD_ERR_NO_FILE, UPLOAD_ERR_CANT_WRITE
var_export($spl_file->getUploadName()); // Nombre del archivo cargado, por ejemplo, 'mi-prueba.jpg'
var_export($spl_file->getSize()); // Obtener el tamaño del archivo, por ejemplo, 13364, en bytes
var_export($spl_file->getPath()); // Obtener el directorio de carga, por ejemplo, '/tmp'
var_export($spl_file->getRealPath()); // Obtener la ruta del archivo temporal, por ejemplo, `/tmp/workerman.upload.SRliMu`
}
return response('ok');
}
}
Nota:
- Después de cargarse, el archivo se nombrará como un archivo temporal, por ejemplo,
/tmp/workerman.upload.SRliMu
- El tamaño de archivo cargado está limitado por defaultMaxPackageSize, por defecto 10M, se puede cambiar el valor predeterminado en el archivo
config/server.php
modificandomax_package_size
. - Después de la solicitud, el archivo temporal se eliminará automáticamente.
- Si la solicitud no tiene archivos cargados,
$request->file()
devolverá una matriz vacía. - Los archivos cargados no admiten el método
move_uploaded_file()
, utiliza el método$file->move()
en su lugar, ver el ejemplo a continuación.
Obtener un archivo cargado específico
$request->file('avatar');
Si el archivo existe, devuelve la instancia correspondiente de webman\Http\UploadFile
, de lo contrario, devuelve nulo.
Ejemplo
<?php
namespace app\controller;
use support\Request;
class UploadController
{
public function file(Request $request)
{
$file = $request->file('avatar');
if ($file && $file->isValid()) {
$file->move(public_path().'/files/miarchivo.'.$file->getUploadExtension());
return json(['code' => 0, 'msg' => 'subida exitosa']);
}
return json(['code' => 1, 'msg' => 'archivo no encontrado']);
}
}
Obtener anfitrión
Obtener la información de host de la solicitud.
$request->host();
Si la dirección de la solicitud no es un estándar 80 o 443, la información de host puede incluir el puerto, por ejemplo, ejemplo.com:8080
. Si no se necesita el puerto, se puede pasar true
como primer parámetro.
$request->host(true);
Obtener el método de solicitud
$request->method();
El valor devuelto puede ser uno de GET
, POST
, PUT
, DELETE
, OPTIONS
, HEAD
.
Obtener la uri de la solicitud
$request->uri();
Devuelve la uri de la solicitud, incluyendo la parte del path y queryString.
Obtener la ruta de la solicitud
$request->path();
Devuelve la parte del path de la solicitud.
Obtener queryString de la solicitud
$request->queryString();
Devuelve la parte queryString de la solicitud.
Obtener la URL de la solicitud
El método url()
devuelve la URL sin parámetros de consulta.
$request->url();
Devuelve algo similar a //www.workerman.net/workerman-chat
El método fullUrl()
devuelve la URL con parámetros de consulta.
$request->fullUrl();
Devuelve algo similar a //www.workerman.net/workerman-chat?type=download
Nota
url()
yfullUrl()
no devuelven la parte del protocolo (no devuelven http o https).
Esto se debe a que en un navegador, utilizar una dirección que comience con//
reconoce automáticamente el protocolo del sitio actual, enviando la solicitud automáticamente como http o https.
Si estás utilizando un proxy nginx, agrega proxy_set_header X-Forwarded-Proto $scheme;
a la configuración de nginx, consultar proxy nginx, de esta manera se puede usar $request->header('x-forwarded-proto');
para determinar si se trata de http o https, por ejemplo:
echo $request->header('x-forwarded-proto'); // Muestra http o https
Obtener la versión del protocolo de la solicitud
$request->protocolVersion();
Devuelve la cadena 1.1
o 1.0
.
Obtener ID de sesión de la solicitud
$request->sessionId();
Devuelve una cadena compuesta por letras y números.
Obtener la IP del cliente de la solicitud
$request->getRemoteIp();
Obtener el puerto del cliente de la solicitud
request->getRemotePort();
Obtener la IP real del cliente de la solicitud
$request->getRealIp($safe_mode=true);
Cuando el proyecto utiliza un proxy (por ejemplo, nginx), al usar $request->getRemoteIp()
generalmente se obtiene la IP del servidor proxy (similar a 127.0.0.1
192.168.x.x
) en lugar de la IP real del cliente. En este caso, se puede intentar utilizar $request->getRealIp()
para obtener la IP real del cliente.
$request->getRealIp()
intentará obtener la IP real a partir de los encabezados HTTP x-real-ip
, x-forwarded-for
, client-ip
, x-client-ip
y via
.
Debido a que los encabezados HTTP son muy fáciles de falsificar, la IP del cliente obtenida mediante este método no es completamente confiable, especialmente cuando
$safe_mode
es false. Una forma más confiable de obtener la IP real del cliente a través de un proxy es conocer la IP del servidor proxy segura y saber claramente qué encabezado HTTP lleva la IP real, si$request->getRemoteIp()
devuelve la IP del servidor proxy segura conocida, entonces se puede obtener la IP real a través de$request->header('encabezado HTTP que lleva la IP real')
.
Obtener la IP del servidor
$request->getLocalIp();
Obtener el puerto del servidor
$request->getLocalPort();
Verificar si es una solicitud ajax
$request->isAjax();
Verificar si es una solicitud de pjax
$request->isPjax();
Verificar si se espera una respuesta en formato json
$request->expectsJson();
Verificar si el cliente acepta respuestas en formato json
$request->acceptJson();
Obtener el nombre del plugin de la solicitud
Para solicitudes que no son de plugin, devuelve una cadena vacía ''
.
$request->plugin;
Esta característica requiere webman>=1.4.0
Obtener el nombre de la aplicación de la solicitud
Para una única aplicación, siempre devuelve una cadena vacía ''
, múltiples aplicaciones devuelve el nombre de la aplicación.
$request->app;
Debido a que las funciones de cierre no pertenecen a ninguna aplicación, el nombre de la solicitud de la ruta de cierre
$request->app
siempre devuelve una cadena vacía''
.
Consultar ruta de cierre en ruta
Obtener el nombre de la clase controladora de la solicitud
Obtiene el nombre de la clase correspondiente al controlador
$request->controller;
Devuelve algo similar a app\controller\IndexController
Debido a que las funciones de cierre no pertenecen a ningún controlador, el nombre de la solicitud de la ruta de cierre
$request->controller
siempre devuelve una cadena vacía''
.
Consultar ruta de cierre en ruta
Obtener el nombre del método de la solicitud
Obtiene el nombre del método del controlador correspondiente a la solicitud
$request->action;
Devuelve algo similar a index
Debido a que las funciones de cierre no pertenecen a ningún controlador, el nombre de la solicitud de la ruta de cierre
$request->action
siempre devuelve una cadena vacía''
.
Consultar ruta de cierre en ruta