Trait 方法 App\Models\Traits\MediaTrait::registerMediaConversions 尚未应用

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

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

我该如何解决这个问题?

php laravel media-library laravel-medialibrary
© www.soinside.com 2019 - 2024. All rights reserved.