我在Spatie Media Library中遇到问题。我创建了类以使用其他文件系统(特别是Google存储桶)。一切运行顺利,我可以正确集成文件系统,保存并通过自定义URL查看。我创建了我的课程,并在文档中将“ Spatie”描述为名称空间namespace Spatie\MediaLibrary\UrlGenerator;
。但是,当我运行“ artisan config:cache”命令时,出现上述错误。
这里是我的自定义类代码,扩展了BaseUrlGenerator:
namespace Spatie\MediaLibrary\UrlGenerator;
use DateTimeInterface;
use Illuminate\Contracts\Config\Repository as Config;
use Illuminate\Filesystem\FilesystemManager;
class GcsUrlGenerator extends BaseUrlGenerator
{
/** @var \Illuminate\Filesystem\FilesystemManager */
protected $filesystemManager;
public function __construct(Config $config, FilesystemManager $filesystemManager)
{
$this->filesystemManager = $filesystemManager;
parent::__construct($config);
}
/**
* Get the url for a media item.
*
* @return string
*/
public function getUrl(): string
{
$url = $this->getPathRelativeToRoot();
if ($root = config('filesystems.disks.'.$this->media->disk.'.root')) {
$url = $root.'/'.$url;
}
$url = $this->rawUrlEncodeFilename($url);
$url = $this->versionUrl($url);
return config('medialibrary.gcs.domain').'/'.$url;
}
/**
* Get the temporary url for a media item.
*
* @param \DateTimeInterface $expiration
* @param array $options
*
* @return string
*/
public function getTemporaryUrl(DateTimeInterface $expiration, array $options = []): string
{
return $this
->filesystemManager
->disk($this->media->disk)
->temporaryUrl($this->getPath(), $expiration, $options);
}
/**
* Get the url for the profile of a media item.
*
* @return string
*/
public function getPath(): string
{
return $this->getPathRelativeToRoot();
}
/**
* Get the url to the directory containing responsive images.
*
* @return string
*/
public function getResponsiveImagesDirectoryUrl(): string
{
$url = $this->pathGenerator->getPathForResponsiveImages($this->media);
if ($root = config('filesystems.disks.'.$this->media->disk.'.root')) {
$url = $root.'/'.$url;
}
return config('medialibrary.gcs.domain').'/'.$url;
}
}
这是我包含在已出版的媒体库供应商中的内容
'custom_url_generator_class' => \Spatie\MediaLibrary\UrlGenerator\GcsUrlGenerator::class,
我在这里想念的是什么?
感谢您的帮助
根据the documentation,您应该实现Spatie\MediaLibrary\UrlGenerator
接口,而不是名称空间。或者,您可以扩展Spatie\MediaLibrary\UrlGenerator\BaseUrlGenerator
来实现该接口本身。因此,您的自定义类的名称空间仍应遵循默认命名,这意味着它应根据文件夹结构和类名具有命名空间,以便正确地自动加载。