*/ public static function collection(HasMedia $model, string $collectionName): array { return $model->getMedia($collectionName) ->map(fn (Media $media) => self::item($media)) ->values() ->all(); } /** * @return array{id: int, url: string, thumb_url: string}|null */ public static function first(HasMedia $model, string $collectionName): ?array { $media = $model->getFirstMedia($collectionName); return $media ? self::item($media) : null; } /** * @return array{id: int, url: string, thumb_url: string} */ public static function item(Media $media): array { return [ 'id' => $media->id, 'url' => self::temporaryUrl($media), 'thumb_url' => $media->hasGeneratedConversion('thumb') ? self::temporaryUrl($media, 'thumb') : self::temporaryUrl($media), ]; } private static function temporaryUrl(Media $media, ?string $conversion = null): string { $disk = $media->disk; if ($disk === 's3') { $visibility = config('filesystems.disks.s3.visibility', 'private'); if ($visibility === 'public') { return $conversion ? $media->getUrl($conversion) : $media->getUrl(); } try { return $media->getTemporaryUrl(now()->addMinutes(30), $conversion ?? ''); } catch (\Exception $e) { return $conversion ? $media->getUrl($conversion) : $media->getUrl(); } } return $conversion ? $media->getUrl($conversion) : $media->getUrl(); } }