إدارة معلومات الدومين في لارافل.
لارافل توفر طرقًا فعّالة للوصول إلى بيانات النطاق (الـ domain)، مما يُمكّن من التحكم الدقيق في معالجة عناوين URL والنطاق الخاص بكل مجال.
كل من هذه الطرق - `host()`، و `httpHost()`، و `schemeAndHttpHost()` - تخدم أغراضًا مُختلفة في معالجة عناوين URL ومعالجة النطاقات.
يشيع استخدام هذه الطرق في أربع حالات:
- عندما يكون التطبيق يعمل على عدة نطاقات (domains).
- عندما يعمل التطبيق على عدة نطاقات فرعية (sub-domain).
- عندما ينشأ التطبيق عناوين بشكل ديناميكي
- عندما يعمل التطبيق على بيئات (enviroments).
// Basic host information retrieval$host = $request->host(); // Returns domain name$httpHost = $request->httpHost(); // Includes port if non-standard$fullUrl = $request->schemeAndHttpHost(); // Full scheme and host
هنا مثال لمُولّد عناوين 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'; }}
مثال على الاستخدام:
// On production (api.example.com){ "api": "https://api.example.com/api/v1", "web": "api.example.com", "assets": "https://cdn.example.com", "environment": "production"}// On staging (api.staging.example.com){ "api": "https://api.staging.example.com/api/v1", "web": "staging.example.com", "assets": "https://staging-cdn.example.com", "environment": "staging"}