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.

Entender los métodos de host de solicitudes de Laravel: una guía completa

#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.

Antonio

Desarrollador backend especializado en PHP y Laravel, con sede en Santander, Cantabria. Más de 15 años de experiencia en el desarrollo de aplicaciones web a medida y en la modernización de código heredado.

Archivado en:

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