digital-creative/nova-json-wrapper

允许您将 Nova 字段分组,并将它们的输出合并为单个 JSON 列。

v0.2.0 2021-02-11 03:20 UTC

This package is auto-updated.

Last update: 2024-09-11 10:49:58 UTC


README

Latest Version on Packagist Total Downloads License

此字段允许您将 Nova 字段分组,并将它们的输出合并为单个 JSON 列。

安装

您可以通过 composer 安装此包

composer require digital-creative/nova-json-wrapper

用法

首先,您需要更新您的模型以将属性值转换为数组

class User extends Model
{
    protected $casts = [
        'options' => 'array'
    ];
}

然后在您的 Nova 资源中创建一个 JsonWrapper 字段并使用 HasJsonWrapper 特性。

use DigitalCreative\JsonWrapper\JsonWrapper;
use DigitalCreative\JsonWrapper\HasJsonWrapper;

class User extends Resource
{
    use HasJsonWrapper; // Important!

    public function fields(Request $request)
    {
        //...
        JsonWrapper::make('options', [

            Text::make('First Name')->rules('required'),
            Text::make('Last Name')->rules('required'),

            JsonWrapper::make('body_mass', [

                Text::make('Weight')->rules('required'),
                Text::make('Height')->rules('required'),

            ])

        ])
    }

}

这会转换为

{ "first_name": "John", "last_name": "Doe", "body_mass": { "weight": 70, "height": 180 } }

并保存到数据库的 options 列。

备注

没有视觉指示表示该字段被包装在 JSON 中,这是故意的。它被设计为与 条件容器 一起使用,允许无缝创建复杂的数据结构,并将所有内容保存到单个 JSON 列中到您的数据库中,以下是一个完整的示例

public function fields(Request $request)
{
    Select::make('Type')
          ->options([
              1, 2, 3, 4, 5
          ])
          ->rules('required'),

    ConditionalContainer::make([

        JsonWrapper::make('data', [

            Text::make('First Name')->rules('required'),
            Text::make('Last Name')->rules('required'),

            Select::make('Gender')
                  ->options([
                      'male' => 'Male',
                      'female' => 'Female'
                  ])
                  ->rules('required'),

            ConditionalContainer::make([ JsonWrapper::make('extra', [ ... ]) ])->if('gender === male'),
            ConditionalContainer::make([ JsonWrapper::make('extra', [ ... ]) ])->if('gender === female'),

        ])

    ])->if('type >= 2'),
}

许可证

MIT 许可证 (MIT)。请参阅 许可证文件 了解更多信息。