'boolean', ]; protected $appends = [ 'full_src', ]; /** * مسیر نسبی ذخیره‌شده در DB — بدون پیشوند دامنه. */ public function getSrcAttribute(): ?string { return $this->attributes['src'] ?? null; } /** * URL کامل قابل نمایش در مرورگر (بر اساس APP_URL و symlink storage). */ public function getFullSrcAttribute(): ?string { return self::publicUrl($this->attributes['src'] ?? null); } 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; } return asset(ltrim($trimmed, '/')); } }