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 у різних середовищах