digital-creative / nova-json-wrapper
允许您将 Nova 字段分组,并将它们的输出合并为单个 JSON 列。
v0.2.0
2021-02-11 03:20 UTC
Requires
- php: >=7.1.0
- laravel/nova: ^3.12.0
README
此字段允许您将 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)。请参阅 许可证文件 了解更多信息。