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

0
Перекладено ШІ
Оригінал: 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 у різних середовищах

Популярні

Logomark Logotype

Перетворення даних у типобезпечні DTO за допомогою пакету Data Model

Досліджуйте новий пакет Data Model для PHP, який спрощує процес гідратації об'єктів без зайвих складнощів! Дізнайтеся, як впровадження типобезпечних об'єктів може революціонізувати ваш підхід до розробки, читаючи нашу статтю

Logomark Logotype

Що нового в PHP 8.5

PHP 8.5 обіцяє безліч нових можливостей, таких як оператор Pipe, функції `array_first()` та `array_last()`, а також нове розширення URI. Чи готові ви дізнатися, як ці функції можуть спростити вашу розробку? Читайте далі, щоб дізнатися більше про ці захоплюючі нововведення

Logomark Logotype

Створення CLI-додатка за допомогою Laravel та Docker

Зазирніть у світ Laravel, де потужний CLI-фреймворк відкриває нові можливості для розробки командного інтерфейсу. Дізнайтеся, як створити просту утиліту для перевірки акцій, яка працює з Docker, та які переваги це може принести у вашому проєкті!