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 Jenaro
Antonio Jenaro

Web Developer

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