marqant-lab / laravel-medialibrary-graphql
一个用于通过 GraphQL 通过 Eloquent 模型分配和获取媒体文件的包。
Requires
- laravel/framework: ^7.0
- marqant-lab/auth-graphql: ^0.0.11
- marqant-lab/lighthouse-json: ^0.0.2
- nuwave/lighthouse: ^4.16
- spatie/laravel-medialibrary: ^8.0.0
Requires (Dev)
- phpunit/phpunit: ^8.5
README
此包包含用于管理任何类型媒体文件并将它们附加到任何给定模型的 GraphQL 查询和突变。
关于
我们使用 Lighthouse 进行 GraphQL。
媒体文件的管理基于 spatie/laravel-medialibrary 包。
默认情况下,此包使用配置中的 Model auth.providers.users.model 进行文件分配。
但发布包配置后,您可以更改此设置,并更改 'laravel-medialibrary-graphql.models.default' 的值。
安装
通过 composer 安装此包。
composer require marqant-lab/laravel-medialibrary-graphql
您将需要运行迁移来设置媒体表。
php artisan migrate
发布配置。
php artisan vendor:publish --provider="Marqant\LaravelMediaLibraryGraphQL\Providers\LaravelMediaLibraryGraphQLServiceProvider" --tag=config
在此配置中,您可以指定分配文件的模型('models.default')以及许多其他设置。该模型应实现 Spatie\MediaLibrary\HasMedia 接口并使用 Spatie\MediaLibrary\InteractsWithMedia 特性。
例如,用户模型
<?php ... use Spatie\MediaLibrary\HasMedia; use Spatie\MediaLibrary\InteractsWithMedia; ... class User extends ... implements HasMedia { use InteractsWithMedia; // ...
您还可以添加所需数量的模型。
配置示例
/** * Model(s) to attach media files to * * by default User model * * you can specify any model to attach media files */ 'models' => [ 'default' => config('auth.providers.users.model'), 'one_more_model' => \Some\Namespace\Model::class, ],
但在此情况下,您需要为 getMedia() 查询和 uploadFile() 及 deleteAllMedia() 突变发送 'model' 参数。
如果 'model' 参数为空(null),则将使用 'models.default' 模型来附加文件。
如果您需要 Spatie\MediaLibrary 配置
php artisan vendor:publish --provider="Spatie\MediaLibrary\MediaLibraryServiceProvider" --tag="config"
如果您计划使用 Web 路由 'media/download/' 下载文件,请将 MEDIA_API_KEY 变量添加到您的 .env 文件中,以使用 API 密钥保护您的应用程序的下载。
您需要将此密钥设置为请求头中的 'apiKey'。
GET http://your.awesome.site/media/download/4bb0e054-e98f-4906-b3f5-0277fd63a194/
Content-Type: application/json
apiKey: {your_secure_api_key}
此包使用其自己的 @guardMedia 指令进行安全保护。
默认情况下,配置中的 'guard' 是 'sanctum',但发布包的配置文件后可以更改它。
您可以设置我们的 marqant-lab/auth-graphql 包进行身份验证,并遵循该包的所有说明。
之后,将导入添加到您的 schema.graphql
#import ../vendor/marqant-lab/lighthouse-json/graphql/*.graphql #import ../vendor/marqant-lab/laravel-medialibrary-graphql/graphql/*.graphql
查询
突变
上传文件突变示例
mutation UploadFile($id: Int!, $file: Upload!, $model: String, $name: String, $properties: Json) { uploadFile(id: $id, file: $file, model: $model, name: $name, properties: $properties) { id name fileName path url downloadUrl properties type uuid createdAt updatedAt } }
{
"id": 1,
"model": null,
"name": "PDF file",
"properties": {
"title": "test title",
"description": "test description"
}
}
加上 'file' 类型 Upload (模型)
响应示例
{
"data": {
"uploadFile": [
{
"name": "PDF file",
"fileName": "001.pdf",
"path": "",
"url": "",
"downloadUrl": "http://your.awesome.site/media/download/4bb0e054-e98f-4906-b3f5-0277fd63a194/",
"properties": "{\"title\":\"test title\",\"description\":\"test description\"}",
"type": "pdf",
"uuid": "4bb0e054-e98f-4906-b3f5-0277fd63a194"
},
...
测试
如果您想执行包测试,请将此添加到 phpunit.xml
<testsuite name="LaravelMedialibraryGraphQL"> <directory suffix="Test.php">./vendor/marqant-lab/laravel-medialibrary-graphql/tests</directory> </testsuite>
然后您可以通过执行以下操作来检查它
php artisan test --group=GraphQLMediaLibrary # or phpunit --group=GraphQLMediaLibrary