Create New Item
Item Type
File
Folder
Item Name
Search file in folder and subfolders...
Are you sure want to rename?
peripherad
/
vendor
/
spatie
/
laravel-medialibrary
/
src
/
Support
/
PathGenerator
:
PathGeneratorFactory.php
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
<?php namespace Spatie\MediaLibrary\Support\PathGenerator; use Illuminate\Database\Eloquent\Relations\Relation; use Spatie\MediaLibrary\MediaCollections\Exceptions\InvalidPathGenerator; use Spatie\MediaLibrary\MediaCollections\Models\Media; class PathGeneratorFactory { public static function create(Media $media): PathGenerator { $pathGeneratorClass = static::getPathGeneratorClass($media); static::guardAgainstInvalidPathGenerator($pathGeneratorClass); return app($pathGeneratorClass); } protected static function getPathGeneratorClass(Media $media) { $defaultPathGeneratorClass = config('media-library.path_generator'); foreach (config('media-library.custom_path_generators', []) as $modelClass => $customPathGeneratorClass) { if (static::mediaBelongToModelClass($media, $modelClass)) { return $customPathGeneratorClass; } } return $defaultPathGeneratorClass; } protected static function mediaBelongToModelClass(Media $media, string $modelClass): bool { // model doesn't have morphMap, so morph type and class are equal if (is_a($media->model_type, $modelClass, true)) { return true; } // config is set via morphMap alias if ($media->model_type === $modelClass) { return true; } // config is set via morphMap class name if (is_a((string)Relation::getMorphedModel($media->model_type), $modelClass, true)) { return true; } return false; } protected static function guardAgainstInvalidPathGenerator(string $pathGeneratorClass): void { if (! class_exists($pathGeneratorClass)) { throw InvalidPathGenerator::doesntExist($pathGeneratorClass); } if (! is_subclass_of($pathGeneratorClass, PathGenerator::class)) { throw InvalidPathGenerator::doesNotImplementPathGenerator($pathGeneratorClass); } } }