classic-o / nova-media-library
工具和字段,可让您管理文件并将它们添加到帖子中
Requires
- php: >=7.1.0
- intervention/image: ^2.
This package is auto-updated.
Last update: 2024-09-26 14:32:46 UTC
README
为Laravel Nova提供的工具和字段,可让您管理文件并将它们添加到帖子中。
目录
功能
- 存储和管理您的媒体文件
- 使用单文件字段
- 使用文件数组字段
- 通过URL/路径上传文件
- 将媒体字段与Trix编辑器集成
- 实现字段的自定义JS回调
- 通过宽度/高度在后台自动调整图片大小
- 在前端裁剪图片
- 创建图片大小变体的能力
- 在单个文件夹中组织文件,按日期或可管理的文件夹分开
- 控制文件可见性的能力
从0.x迁移到1.x
在版本1.x中,配置文件和数据库迁移已更改。
升级到版本1.x后,您需要从数据库中删除旧表,然后重新安装和重新配置这些文件。
要求
- Laravel 5.8+
- Nova 2
- intervention/image 包用于图像调整大小(可选)
安装
composer require classic-o/nova-media-library
php artisan vendor:publish --provider="ClassicO\NovaMediaLibrary\ToolServiceProvider"
php artisan migrate
php artisan storage:link
配置
使用
在app/Providers/NovaServiceProvider.php中添加工具
public function tools()
{
return [
new \ClassicO\NovaMediaLibrary\NovaMediaLibrary()
];
}
将字段添加到资源。
use ClassicO\NovaMediaLibrary\MediaLibrary;
class Post extends Resource
{
...
public function fields(Request $request)
{
return [
...
MediaLibrary::make('Image'),
...
];
}
...
}
自定义
默认情况下,此字段用作单文件。如果需要用作文件数组,请添加选项
# Display
MediaLibrary::make('Gallery')
->array(),
默认情况下,此文件将自动显示,如工具中所示,为 gallery
或 list
您可以在第一个参数中设置所需显示类型
MediaLibrary::make('Documents')
->array('list'),
当您使用数组时,请将模型中所需列的casts设置为array,并将数据库中的类型设置为 nullable TEXT
对于单个文件 - nullable INT
如果您想在手风琴下隐藏文件,请添加以下选项
MediaLibrary::make('Gallery')
->array()
->hidden()
您可以通过类型(配置文件中类型的标签)限制文件的选取
MediaLibrary::make('File')
->types(['Audio', 'Video'])
要在字段中设置图像的预览大小,请添加以下选项(裁剪附加图像变体的标签)
默认情况下,预览大小已在配置文件中设置。
MediaLibrary::make('File')
->preview('thumb')
您还可以将媒体字段与Trix编辑器集成。您需要在 trix
选项中设置一个唯一的名称,并在Trix字段中添加一个具有相同名称的附加属性
MediaLibrary::make('For Trix')
->trix('unique_trix_name'),
Trix::make('Content')
->withMeta([ 'extraAttributes' => [ 'nml-trix' => 'unique_trix_name' ] ])
要为媒体字段设置自定义回调,请使用 jsCallback
方法。
- 第一个参数设置为JS函数回调的名称。
- 第二个(可选)是高级选项数组
MediaLibrary::make('JS Callback')
->jsCallback('callbackName', [ 'example' => 'Nova' ]),
您的JavaScript回调应该有2个参数。第一个将是文件数组,第二个是您的选项。
window.callbackName = function (array, options) {
console.log(array, options);
}
当您在一个资源上使用JS回调或Trix选项两次或更多次时,请将make方法的第二个参数设置为任何唯一的名称
MediaLibrary::make('JS Callback', 'js_cb_name_1')
->jsCallback('callbackName', [ 'example' => 'Nova' ]),
MediaLibrary::make('Trix Field', 'trix_name_1')
->trix('unique_trix_name'),
通过URL或路径上传
您还可以通过URL或路径编程性地将文件添加到媒体库。
use \ClassicO\NovaMediaLibrary\API;
$result = API::upload('https://pay.google.com/about/static/images/social/og_image.jpg');
如果上传成功,函数将返回模型实例。
如果加载时发生错误,函数将抛出异常。
异常(code => text
)
0
- 由于未知原因未下载文件
1
- 禁止的文件格式
2
- 文件大小限制超出
通过ID获取文件
在您的模型中只存储文件(夹)的id。要获取文件,请使用API类方法。
$files = API::getFiles($ids, $imgSize = null, $object = false);
# First parameter - id or array of ids
# Second - if you want to get images by size variation, write label of size
# Third - by default function return array of urls. If you want to get full data of files - set true (returns object / array of objects)
私有文件
当您使用本地存储或S3(具有私有可见性)时,您不能通过URL获取文件。
要获取文件,您需要创建一个名为nml-private-file
的GET路由,带有参数id
和可选的img_size
。在控制器中添加用户访问验证。
如果访问被允许,您可以通过API方法获取文件。
... Verifying access
$file = API::getFiles($id, null, true);
return API::getPrivateFile($file->path, request('img_size'))
本地化
要将此工具翻译成其他语言,您需要通过添加来自en.json的短语来添加翻译文件/resources/lang/vendor/nova-media-library/{lang}.json
。