creode/laravel-nova-assets

基于现有的Laravel Assets模块,增加功能使其能够在Nova中工作。

2.4.1 2024-07-02 14:41 UTC

README

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

基于现有的Laravel Assets模块,增加可钩子的功能使其能够在Nova中工作。

安装

您可以通过Composer安装此包

composer require creode/laravel-nova-assets

您可以使用以下命令发布配置文件

php artisan vendor:publish --tag="nova-assets-config"

这是发布配置文件的内容

// config for Creode/LaravelNovaAssets
return [
    /*
    |--------------------------------------------------------------------------
    | Default Upload Accepted Mime Types
    |--------------------------------------------------------------------------
    |
    | This value contains the default bulk fields which will be rendered when
    | doing a bulk upload. You can add or remove fields as you wish.
    |
    */

    'default_upload_accepted_mime_types' => [
        'image/*',
        'application/zip',
        'zip',
        'application/pdf',
    ],

    /*
    |--------------------------------------------------------------------------
    | Allowed Zip File Extensions
    |--------------------------------------------------------------------------
    |
    | This value contains an array of allowed file extensions which will be
    | pulled when extracting zip files during a bulk upload action.
    |
    */

    'accepted_zip_file_extensions' => [
        'png',
        'jpeg',
        'jpg',
        'webp',
        'pdf',
    ],

    /*
    |--------------------------------------------------------------------------
    | Asset Policy
    |--------------------------------------------------------------------------
    |
    | This value contains the policy which will be used when verifying if a
    | user can perform an action on an asset. You can change this to your own
    | policy if you wish.
    |
    */

    'asset_policy' => \Creode\LaravelNovaAssets\Policies\AssetPolicy::class,

    /*
    |--------------------------------------------------------------------------
    | Image Driver
    |--------------------------------------------------------------------------
    |
    | This value contains the image driver which will be used when generating
    | thumbnails. You can change this to your own driver if you wish. Drivers
    | must implement the Intervention\Image\Interfaces\DriverInterface
    | interface.
    |
    | This can be one of the following:
    | Intervention\Image\Drivers\Gd\Driver::class
    | Intervention\Image\Drivers\Imagick\Driver::class
    |
    */
    'image_driver' => Intervention\Image\Drivers\Gd\Driver::class,

    /*
    |--------------------------------------------------------------------------
    | Traffic Cop
    |--------------------------------------------------------------------------
    |
    | Indicates whether Nova should check for modifications between viewing
    | and updating a resource.
    |
    */
    'traffic_cop' => true,

    /*
    |--------------------------------------------------------------------------
    | Show Max Upload Size
    |--------------------------------------------------------------------------
    |
    | Indicates whether to show the max upload size in the asset resource.
    |
    */
    'show_max_upload_size' => false,
];

用法

本模块的目的是使用现有的资产模型类并将其包装成Nova资源。这使得我们能够在Nova中使用资产模块的现有功能。我们使用一些可钩子的功能,如下文所述,允许任何子模块向资源添加自定义字段和操作。

注册自定义资源字段

您可以将自定义资源字段注册到标准Nova页面(详细、编辑、创建)以及批量资产上传操作中。为此,您需要监听DefineAssetFieldsEvent事件并将字段添加到$fields数组中。有关Nova字段的完整列表,请参阅Nova文档

Event::listen(function (DefineAssetFieldsEvent $event) {
    $event->fields[] = Text::make('Folder', 'folder_id');
});

注册自定义资源操作

您可以将自定义资源操作注册到资产资源中。为此,您需要监听DefineAssetActionsEvent事件并将操作添加到$actions数组中。这些操作仅使用Nova的标准操作功能。有关定义操作的详细信息,请参阅Nova文档

Event::listen(function (DefineAssetActionsEvent $event) {
    $event->actions[] = TestActionClass::make();
});

注册自定义批量资产字段

您可以将自定义批量资产字段注册到批量资产上传操作中。为此,您需要监听DefineBulkAssetFieldsEvent事件并将字段添加到$fields数组中。有关Nova字段的完整列表,请参阅Nova文档

Event::listen(function (DefineBulkAssetFieldsEvent $event) {
    $event->fields[] = Text::make('Folder', 'folder_id');
});

在另一个字段之后插入字段

从本模块的1.4.0版本开始,您现在可以运行一个辅助函数来在另一个属性之后添加一个属性。这可以通过以下方式完成

Event::listen(function (DefineAssetFieldsEvent $event) {
    $event->addFieldAfter('name', Text::make('Folder', 'folder_id'));
});

这将直接在另一个字段之后注入字段。如果您想在特定的字段之后添加字段但不想担心字段数组的顺序,这很有用。唯一的限制是,如果提供的第一个属性的字段不存在,它将不会添加字段。

权限

此模块公开了一个新的权限生成器类,需要将其发布到您的应用程序中,以便为新资源授予权限。为此,您需要运行以下命令

php artisan vendor:publish --tag="nova-assets-seeders"

这将创建一个名为AssetRoleAndPermissionSeeder.php的新文件,位于您的database/seeders目录中。这将需要运行以授予新资源的权限。您可以通过运行以下命令来运行此命令

php artisan db:seed --class=AssetRoleAndPermissionSeeder

现在,您应该在数据库中看到一系列权限以及一个名为asset-manager的新角色。此角色将拥有管理资产所需的所有权限。在运行此命令之前,需要设置spatie/laravel-permissions包的任何表格。有关更多信息,请参阅文档

测试

composer test

更新日志

请参阅变更日志了解最近更改的详细信息。

贡献

请参阅贡献指南以获取详细信息。

安全漏洞

请查阅我们的安全政策了解如何报告安全漏洞。

鸣谢

许可协议

MIT 许可协议 (MIT)。有关更多信息,请参阅许可文件