bbs-lab/nova-cloudinary-field

为 Laravel Nova 提供的 Cloudinary 媒体库字段。

v1.0.0 2024-06-28 15:04 UTC

This package is auto-updated.

Last update: 2024-08-28 15:35:08 UTC


README

Latest Version on Packagist Software License Total Downloads

A Cloudinary Media Library field and tool for Laravel Nova.

cloudinary editor field screenshot

内容

安装

您可以通过 composer 安装此软件包

composer require bbs-lab/nova-cloudinary-field

该软件包将自动注册自己。

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

php artisan vendor:publish --provider="BBSLab\CloudinaryField\CloudinaryFieldServiceProvider" --tag="config"

这是发布配置文件的内容

<?php

declare(strict_types=1);

return [

    'default' => [
        'cloud' => env('NOVA_CLOUDINARY_DEFAULT_CLOUD'),
        'username' => env('NOVA_CLOUDINARY_DEFAULT_USERNAME'),
        'key' => env('NOVA_CLOUDINARY_DEFAULT_KEY'),
        'secret' => env('NOVA_CLOUDINARY_DEFAULT_SECRET'),
    ],

];

使用

您可以在您的 Nova 资源中使用 BBSLab\CloudinaryField\Cloudinary 字段

<?php

namespace App\Nova;

declare(strict_types=1);

namespace App\Nova;

class BlogPost extends Resource
{
    // ...
    
    public function fields(Request $request)
    {
        return [
            // ...

            Cloudinary::make('Image'),

            // ...
        ];
    }
    
}

重要

默认情况下,该字段存储数据数组,您必须将属性强制转换为 array

高级使用

多选

当在您的 Nova 资源上使用 Cloudinary 字段时,您可以告诉工具允许对您的属性进行多选。

默认情况下,该工具仅允许单选。

<?php

declare(strict_types=1);

namespace App\Nova;

use BBSLab\CloudinaryField\Cloudinary;

class BlogPost extends Resource
{
    // ...
    
    public function fields(Request $request)
    {
        return [
            // ...

            Cloudinary::make('Image')
                ->multiple(),

            // ...
        ];
    }
    
}

限制选择文件的数量

您可以使用 limit 方法限制选择文件的数量。

<?php

declare(strict_types=1);

namespace App\Nova;

use BBSLab\CloudinaryField\Cloudinary;

class BlogPost extends Resource
{
    // ...
    
    public function fields(Request $request)
    {
        return [
            // ...

            Cloudinary::make('Image')
                ->multiple()
                ->limit(10),

            // ...
        ];
    }
    
}

按需配置

您可以使用以下方法在字段上设置一些配置

  • cloud(string $cloud): 设置云名称。
  • username(string $username): 设置用户名。
  • key(string $key): 设置 API 密钥。
  • secret(string $secret): 设置 API 密钥。

此外,您还可以使用 configureUsing 方法在字段上设置配置

<?php

declare(strict_types=1);

namespace App\Nova;

use BBSLab\CloudinaryField\Cloudinary;use Laravel\Nova\Http\Requests\NovaRequest;

class BlogPost extends Resource
{
    // ...
    
    public function fields(Request $request)
    {
        return [
            // ...

            Cloudinary::make('Image')
                ->configureUsing(function (NovaRequest $request) {
                    return [
                        'cloud' => 'my_cloud',
                        'username' => 'my_username',
                        'key' => 'my_key',
                        'secret' => 'my_secret',
                    ];
                });

            // ...
        ];
    }
    
}

依赖字段

您可以使用 dependsOn 方法根据另一个字段的值有条件地显示字段。请参见以下示例

<?php

declare(strict_types=1);

namespace App\Nova;

use BBSLab\CloudinaryField\Cloudinary;
use Laravel\Nova\Fields\Boolean;
use Laravel\Nova\Fields\FormData;
use Laravel\Nova\Fields\ID;
use Laravel\Nova\Fields\Text;
use Laravel\Nova\Http\Requests\NovaRequest;

class BlogPost extends Resource
{
    // ...

    public function fields(NovaRequest $request): array
    {
        return [
            ID::make()->sortable(),

            Text::make('Title')
                ->sortable()
                ->rules('required', 'max:255'),

            Boolean::make('Has Image')
                ->sortable()
                ->rules('required'),

            Cloudinary::make('Image')
                ->rules('nullable')
                ->fullWidth()
                ->hide()
                ->dependsOn('has_image', function (Cloudinary $field, NovaRequest $request, FormData $formData) {
                    if ($formData->has_content) {
                        $field
                            ->show()
                            ->rules('required');
                    } else {
                        $field->hide();
                    }
                }),
        ];
    }
}

提示

有关依赖字段更详细的信息,请参阅官方文档

工具

该软件包还提供了一种直接访问 Cloudinary 媒体库的工具。

您可以在 NovaServiceProvider 中注册此工具

<?php

declare(strict_types=1);

namespace App\Providers;

use BBSLab\CloudinaryField\NovaCloudinary;
use Laravel\Nova\NovaApplicationServiceProvider;

class NovaServiceProvider extends NovaApplicationServiceProvider
{
    // ...

    public function tools(): array
    {
        return [
            NovaCloudinary::make(),
        ];
    }
}

截图

索引

Index view

详情

Detail view

表单

Create view Modal view Edit view

工具

Tool

更新日志

有关最近更改的更多信息,请参阅 更新日志

安全

如果您发现任何与安全相关的问题,请通过电子邮件 paris@big-boss-studio.com 联系我们,而不是使用问题跟踪器。

贡献

有关详细信息,请参阅 贡献

致谢

许可

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