*/ public private(set) Collection $settings; public function __construct() { $this->settings = new Collection(); $this->refresh(); } /** * Get a setting value or return a default. */ public function getOrDefault(string $settingName, string $default = ''): string { return $this->settings->get($settingName, $default); } /** * Refresh settings from database/cache. */ public function refresh(): void { Cache::forget('website_settings'); try { $result = Cache::remember( key: 'website_settings', ttl: now()->addMinutes(5), callback: function () { if (!Schema::hasTable('website_settings')) { return collect([]); } return WebsiteSetting::pluck('value', 'key'); } ); $data = $this->normalizeSettings($result); /** @var Collection */ $this->settings = new Collection($data); } catch (Throwable) { /** @var Collection */ $this->settings = new Collection([]); } } /** * Normalize settings data to ensure all keys and values are strings. * * @param Collection|array $result * @return array */ private function normalizeSettings(Collection|array $result): array { $data = []; foreach ($result as $key => $value) { // array-key is int|string, so we can safely cast to string $safeKey = (string) $key; // Ensure value is a string if (is_scalar($value)) { $safeValue = (string) $value; } elseif (is_null($value)) { $safeValue = ''; } else { continue; // Skip non-scalar, non-null values } $data[$safeKey] = $safeValue; } return $data; } }