throw(); $image = $imageResponse->body(); $file = File::createWithContent(basename($url), $image); /** @var \Illuminate\Filesystem\FilesystemAdapter $fs */ $fs = Storage::disk(Config::get('image.disk')); $fsFile = $fs->putFile($this->path($facet, $model), $file); Log::info("Creating Image {$fsFile}"); /** @var Image $image */ $image = Image::query()->create([ Image::ATTRIBUTE_FACET => $facet->value, Image::ATTRIBUTE_PATH => $fsFile, ]); $this->attachImage($image, $model); return $image; } /** * Create the images. * * @param mixed $image * @param ImageFacet $facet * @param (BaseModel&HasImages)|null $model * @return Image */ public function createImageFromFile(mixed $image, ImageFacet $facet, (BaseModel&HasImages)|null $model = null): Image { /** @var \Illuminate\Filesystem\FilesystemAdapter $fs */ $fs = Storage::disk(Config::get('image.disk')); $fsFile = $fs->putFile($this->path($facet, $model), $image); Log::info("Creating Image {$fsFile}"); /** @var Image $image */ $image = Image::query()->create([ Image::ATTRIBUTE_FACET => $facet->value, Image::ATTRIBUTE_PATH => $fsFile, ]); $this->attachImage($image, $model); return $image; } /** * Path to storage image in filesystem. * * @param ImageFacet $facet * @param (BaseModel&HasImages)|null $model * @return string */ protected function path(ImageFacet $facet, (BaseModel&HasImages)|null $model): string { $path = Str::of(''); if ($model !== null) { $path = $path ->append(Str::kebab(class_basename($model))) ->append(DIRECTORY_SEPARATOR); } return $path ->append(Str::kebab($facet->localize())) ->__toString(); } /** * Try attach the image. * * @param Image $image * @param (BaseModel&HasImages)|null $model * @return void */ protected function attachImage(Image $image, (BaseModel&HasImages)|null $model): void { if ($model !== null) { Log::info("Attaching Image {$image->getName()} to {$this->privateLabel($model)} {$model->getName()}"); $model->images()->attach($image); } } }