无法声明类Spatie \ MediaLibrary \ UrlGenerator \ GcsUrlGenerator类,因为该名称已在使用中

问题描述 投票:0回答:1

我在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,

我在这里想念的是什么?

感谢您的帮助

laravel caching filesystems spatie media-library
1个回答
0
投票

根据the documentation,您应该实现Spatie\MediaLibrary\UrlGenerator接口,而不是名称空间。或者,您可以扩展Spatie\MediaLibrary\UrlGenerator\BaseUrlGenerator来实现该接口本身。因此,您的自定义类的名称空间仍应遵循默认命名,这意味着它应根据文件夹结构和类名具有命名空间,以便正确地自动加载。

© www.soinside.com 2019 - 2024. All rights reserved.