resource instanceof MissingValue) { return []; } // Safe accessor to avoid magic __get which may trigger MissingValue errors $get = function ($key) { $r = $this->resource; if ($r instanceof MissingValue || $r === null) { return null; } if (method_exists($r, 'getAttribute')) { return $r->getAttribute($key); } if (is_array($r)) { return $r[$key] ?? null; } if (is_object($r)) { return $r->{$key} ?? null; } return null; }; $primaryCategory = $this->whenLoaded('categories', function () { return $this->categories->sortBy('sort_order')->first(); }); // Normalize MissingValue into null so later checks are straightforward if ($primaryCategory instanceof MissingValue) { $primaryCategory = null; } $contentTypeSlug = null; $categoryPath = null; if ($primaryCategory) { $contentTypeSlug = optional($primaryCategory->contentType)->slug ?? null; $categoryPath = $primaryCategory->full_slug_path ?? null; } $slugVal = $get('slug'); $webUrl = $contentTypeSlug && $categoryPath && $slugVal ? '/' . strtolower($contentTypeSlug) . '/' . strtolower($categoryPath) . '/' . $slugVal : null; return [ 'slug' => $slugVal, 'title' => $get('title'), 'description' => $this->when($request->boolean('include_description'), fn() => $get('description')), 'dimensions' => [ 'width' => $get('width'), 'height' => $get('height'), ], 'thumbnail_url' => $this->when(! empty($get('file_path')), fn() => Storage::url($get('file_path'))), 'author' => $this->whenLoaded('user', function () { return [ 'name' => $this->user->name ?? null, ]; }), 'category' => $primaryCategory ? [ 'slug' => $primaryCategory->slug ?? null, 'name' => $primaryCategory->name ?? null, 'content_type' => $contentTypeSlug, 'url' => $webUrl, ] : null, 'urls' => [ 'web' => $webUrl, 'canonical' => $webUrl, ], ]; } }