'boolean', ]; protected $appends = [ 'full_src', ]; /** * URL کامل تصویر — همان قرارداد قبلی API (src = آدرس قابل نمایش). */ public function getSrcAttribute(): ?string { return self::publicUrl($this->attributes['src'] ?? null); } public function getFullSrcAttribute(): ?string { return $this->src; } /** * ساخت URL عمومی از مسیر نسبی storage/... * قبلاً: env('domain') + path — بدون اسلش بین دامنه و مسیر خراب می‌شد. */ public static function publicUrl(?string $path): ?string { if ($path === null || trim($path) === '') { return null; } $trimmed = trim($path); if (preg_match('/^https?:\/\//i', $trimmed)) { return $trimmed; } $domain = rtrim((string) (env('domain') ?: config('app.url')), '/'); return $domain.'/'.ltrim($trimmed, '/'); } }