我在 Laravel 应用程序中使用媒体库,在我拥有的一些模型中,我共享如下相同的功能
<?php
namespace App\Models;
use Spatie\Image\Manipulations;
use Spatie\MediaLibrary\HasMedia;
use Illuminate\Database\Eloquent\Model;
use Spatie\MediaLibrary\InteractsWithMedia;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Spatie\MediaLibrary\MediaCollections\Models\Media;
final class Foo extends Model implements HasMedia
{
use HasFactory;
use InteractsWithMedia;
const MEDIA_CONVERSION_NAME = 'thumb250x250';
const MEDIA_CONVERSION_WIDTH = 250;
const MEDIA_CONVERSION_HEIGHT = 250;
public function registerMediaConversions(?Media $media = null): void
{
$this->addMediaConversion(self::MEDIA_CONVERSION_NAME)
->fit(
Manipulations::FIT_CROP,
self::MEDIA_CONVERSION_WIDTH,
self::MEDIA_CONVERSION_HEIGHT
);
}
other methods here...
}
因此,与其将相同的方法从一个模型复制粘贴到另一个模型,我认为将此共享代码移动到特征中是有意义的。所以最后做了这个
<?php
namespace App\Models;
use App\Traits\AppMediaLibraryTrait;
use Spatie\MediaLibrary\HasMedia;
use Illuminate\Database\Eloquent\Model;
use Spatie\MediaLibrary\InteractsWithMedia;
use Illuminate\Database\Eloquent\Factories\HasFactory;
final class Foo extends Model implements HasMedia
{
use HasFactory;
use InteractsWithMedia;
use AppMediaLibraryTrait;
other methods here...
}
// in App/Traits
<?php
namespace App\Models\Traits;
use Spatie\Image\Manipulations;
use Spatie\MediaLibrary\MediaCollections\Models\Media;
trait AppMediaLibraryTrait
{
// Traits seems to don't like declaring contstants so I had to hardcode them
public function registerMediaConversions(?Media $media = null): void
{
$this->addMediaConversion('thumb250x250')->fit(Manipulations::FIT_CROP, 250, 250);
}
}
但是我收到以下错误
Whoops\Exception\ErrorException
Trait method App\Models\Traits\MediaTrait::registerMediaConversions has not been applied as App\Models\Variation::registerMediaConversions, because of collision with Spatie\MediaLibrary\InteractsWithMedia::registerMediaConversions
我该如何解决这个问题?