Інформація про хост в Laravel

Перекладено ШІ
Оригінал: Laravel News
Оновлено: 13 лютого, 2025
Laravel пропонує потужні методи для роботи з інформацією про хост запиту, що дозволяє точно управляти URL та логікою, пов'язаною з доменами. Досліджуйте, як ці методи можуть спростити розробку багатокористувацьких додатків та динамічно генерувати URL для різних середовищ

Laravel пропонує потужні методи для доступу та управління інформацією про хост запиту, що дає змогу точно контролювати обробку URL та логіку, специфічну для доменів. Методи host(), httpHost() і schemeAndHttpHost() виконують різні функції в маніпулюванні URL та обробці доменів.

Ця функціональність є особливо важливою при створенні багатокористувацьких застосунків, обробці запитів з різних доменів або управлінні додатками, які потребують динамічного генерування URL, специфічних для доменів.

// Отримання основної інформації про хост
$host = $request->host();  // Повертає назву домену
$httpHost = $request->httpHost();  // Включає порт, якщо він нестандартний
$fullUrl = $request->schemeAndHttpHost();  // Повний протокол та хост

Ось приклад генератора URL для багатьох середовищ:

// app/Services/DomainRouter.php
<?php
 
namespace App\Services;
 
use Illuminate\Http\Request;
 
class DomainRouter
{
    public function __construct(private Request $request)
    {
    }
 
    public function generateRoutes(): array
    {
        $baseHost = $this->request->host();
        $scheme = $this->request->schemeAndHttpHost();
 
        return match($this->getEnvironment($baseHost)) {
            'production' => [
                'api' => "{$scheme}/api/v1",
                'web' => $this->request->httpHost(),
                'assets' => str_replace('api', 'cdn', $scheme),
                'environment' => 'production'
            ],
            'staging' => [
                'api' => "{$scheme}/api/v1",
                'web' => str_replace('api', 'staging', $this->request->httpHost()),
                'assets' => str_replace('api', 'staging-cdn', $scheme),
                'environment' => 'staging'
            ],
            default => [
                'api' => 'http://localhost:8000/api/v1',
                'web' => 'http://localhost:3000',
                'assets' => 'http://localhost:9000',
                'environment' => 'local'
            ]
        };
    }
 
    private function getEnvironment(string $host): string
    {
        if (str_contains($host, 'prod')) {
            return 'production';
        }
 
        if (str_contains($host, 'staging')) {
            return 'staging';
        }
 
        return 'local';
    }
}

Приклад використання:

// В продукції (api.example.com)
{
    "api": "https://api.example.com/api/v1",
    "web": "api.example.com",
    "assets": "https://cdn.example.com",
    "environment": "production"
}
// На стадії (api.staging.example.com)
{
    "api": "https://api.staging.example.com/api/v1",
    "web": "staging.example.com",
    "assets": "https://staging-cdn.example.com",
    "environment": "staging"
}

Методи хостингу Laravel забезпечують гнучкі способи обробки логіки, специфічної для доменів, і генерації URL у різних середовищах