0

我在使用 Spatie 媒体库时遇到问题。我创建了我的类以使用不同的文件系统(特别是 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,

我在这里缺少什么?

谢谢你帮助我

4

1 回答 1

1

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

于 2019-12-23T12:03:15.540 回答