Files
boursecu_server/app/Models/File.php
T

66 lines
1.5 KiB
PHP
Raw Normal View History

2026-02-16 09:29:37 +00:00
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class File extends Model
{
2026-06-29 20:02:20 +03:30
use HasFactory, Selector;
2026-06-29 19:58:06 +03:30
2026-02-16 09:29:37 +00:00
protected $fillable = [
'original_name',
'title',
'ext',
'src',
'size',
'user_id',
'type',
'has_thumb',
'url',
];
2026-06-29 19:58:06 +03:30
2026-02-16 09:29:37 +00:00
protected $casts = [
2026-06-29 19:58:06 +03:30
'has_thumb' => 'boolean',
2026-02-16 09:29:37 +00:00
];
2026-06-29 19:58:06 +03:30
protected $appends = [
'full_src',
];
/**
2026-06-29 20:02:20 +03:30
* URL کامل تصویر — همان قرارداد قبلی API (src = آدرس قابل نمایش).
2026-06-29 19:58:06 +03:30
*/
public function getSrcAttribute(): ?string
{
return self::publicUrl($this->attributes['src'] ?? null);
}
2026-06-29 20:02:20 +03:30
public function getFullSrcAttribute(): ?string
{
return $this->src;
}
/**
* ساخت URL عمومی از مسیر نسبی storage/...
* قبلاً: env('domain') + path — بدون اسلش بین دامنه و مسیر خراب می‌شد.
*/
2026-06-29 19:58:06 +03:30
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;
}
2026-06-29 20:02:20 +03:30
$domain = rtrim((string) (env('domain') ?: config('app.url')), '/');
return $domain.'/'.ltrim($trimmed, '/');
2026-02-16 09:29:37 +00:00
}
}