Entender los métodos de host de solicitudes de Laravel: una guía completa
- Publicado el 28 octubre, 2024
- Palabras: 469
Al crear aplicaciones web, es fundamental comprender y manipular la información de las solicitudes. Laravel ofrece varios métodos prácticos para recuperar el host de las solicitudes entrantes. En esta publicación, exploraremos los métodos host(), httpHost() y schemeAndHttpHost(), sus diferencias y cuándo usar cada uno.

#Comprendiendo los métodos Request Host
El objeto Request de Laravel ofrece tres métodos para recuperar el host de una solicitud entrante:
- host(): devuelve el nombre del host.
- httpHost(): devuelve el nombre del host HTTP y el número de puerto.
- schemeAndHttpHost(): devuelve el esquema de URL completo y el host HTTP.
Profundicemos en cada método:
#El método host()
El método host() devuelve el nombre del host de la solicitud:
$host = $request->host();
#El método httpHost()
El método httpHost() devuelve el nombre del host HTTP y el número de puerto:
$httpHost = $request->httpHost();
#El método schemeAndHttpHost()
El método schemeAndHttpHost() devuelve el esquema de URL completo y el host HTTP:
$fullHost = $request->schemeAndHttpHost();
#Ejemplo práctico
Consideremos un escenario en el que estamos creando una aplicación multi-tenant que necesita gestionar solicitudes de diferentes subdominios. Usaremos estos métodos para determinar a qué tenant se está accediendo y para generar URL completas para cada tenant.
A continuación, se muestra cómo podríamos usar estos métodos en un middleware:
<?php
namespace AppHttpMiddleware;
use Closure;
use IlluminateHttpRequest;
class DetermineTenant
{
public function handle(Request $request, Closure $next)
{
$host = $request->host();
$tenant = Tenant::where('subdomain', $host)->firstOrFail();
// Store the tenant in the request for later use
$request->merge(['tenant' => $tenant]);
// Generate URLs for the tenant
$tenantUrls = [
'dashboard' => $request->schemeAndHttpHost() . '/dashboard',
'api' => $request->schemeAndHttpHost() . '/api/v1',
];
$request->merge(['tenantUrls' => $tenantUrls]);
return $next($request);
}
}
Ahora veamos cómo podría funcionar esto en la práctica:
// Assuming the request is coming from 'client1.ourapp.com'
// In a controller action
public function dashboard(Request $request)
{
$tenant = $request->tenant;
$dashboardUrl = $request->tenantUrls['dashboard'];
return view('dashboard', compact('tenant', 'dashboardUrl'));
}
El resultado podría verse así:
// GET http://client1.ourapp.com/dashboard
{
"view": "dashboard",
"data": {
"tenant": {
"id": 1,
"name": "Client 1",
"subdomain": "client1"
},
"dashboardUrl": "http://client1.ourapp.com/dashboard"
}
}
En este ejemplo:
- Usamos host() para determinar el inquilino en función del subdominio.
- Usamos schemeAndHttpHost() para generar las URL completas para el panel de control y la API del inquilino.
Este enfoque nos permite gestionar varios tenants en diferentes subdominios y, al mismo tiempo, generar las URL correctas para cada tenant.
Fuente: Harris Raftopoulos
Inicia la conversación
Hazte miembro de Antonio Jenaro para comenzar a comentar.
Regístrate ahora¿Ya estás registrado? Inicia sesión