ogrre/laravel-media
用于laravel中轻松管理媒体的包
Requires
- php: ^7.3|^8.0|^8.1
- illuminate/database: ^7.0|^8.0|^9.0|^10.0
- illuminate/support: ^7.0|^8.0|^9.0|^10.0
README
简介
此Laravel包允许您将媒体与模型关联,以便更轻松地管理文件。
这是我的第一个包,请不要犹豫报告问题,我可能没有考虑到所有情况。
文档、安装和使用说明
请参阅文档以获取详细的安装和使用说明。
安装
此包发布了一个config/media.php文件。如果您已经有一个同名文件,您必须重命名或删除它。
您可以通过composer安装此包
composer require ogrre/laravel-media
服务提供者会自动在app.php中注册,但您可以在config/app.php中手动添加服务提供者
# config/app.php
'providers' => [
// ...
Ogrre\Media\MediaServiceProvider::class,
];
为了正常工作,您需要启动迁移,因此请确保您的config文件夹中有media.php,以及您的应用database/migrations文件夹中的create_media_tables.php文件。
如果不是这样,请运行以下命令
php artisan vendor:publish --provider="Ogrre\Media\MediaServiceProvider"
配置
默认情况下,Media类将使用媒体配置文件中的mime_type和disk值作为属性。您可以在config/media.php中更改这些值。
用法
此包使用两个类,即Media
类和MediaFile
类,来管理文件。为了管理文件,您需要将模型(例如用户)与媒体(例如头像)关联起来。因此,您首先需要创建头像媒体。
媒体
Media
类作为Laravel的Eloquent模型的创建、更新等操作工作。
您可以如下创建媒体:
Media::create(['name' => "new_media"]);
在这种情况下,媒体将使用配置文件中对应默认属性创建。
否则,您可以按照经典方式操作
Media::create(['name' => "pdf_media", "mime_type" => "pdf", "disk" => "public"]);
一旦创建了媒体,您就可以将它们与具有hasMedia
特征的模型关联起来。
例如User
模型
class User extends Authenticatable
{
use HasFactory, HasMedia;
...
在User
模型中关联媒体
$user = User::find(1)
// assign media by id
$user->assignMedia(1);
// assign media by name
$user->assignMedia("avatar);
// assign multipe media
$user->assignMedia(['avatar', 'new_media']);
// assign media with media object
$media = Media::find(1);
$user->assignMedia($media);
您可以检查模型是否具有媒体
// return false if user hasn't this media
$user->hasMedia($media);
媒体文件
当一个媒体与模型关联时,您可以添加一个文件,该文件将与模型和媒体一起关联,它的工作方式类似于经典的CRUD。
public function upload(Request $request)
{
$file = $request->file('avatar');
$user = User::find(1);
$user->addMediaFile($file, 'avatar');
}
getMediaFile
函数将返回包含有关文件的全部有用数据的MediaFile
模型。
$user->getMediaFile('avatar');
updateMediaFile
函数将删除之前保存的文件,并将新文件保存到媒体磁盘上。
$user->updateMediaFile($file, $media);
deleteMediaFile
将删除与模型关联的Mediafile
以及文件。
$user->deleteMediaFile(1);
贡献
欢迎贡献,并将完全获得认可。我接受通过GitHub上的Pull Requests进行贡献。