返回

Laravel Nova Repeater 字段的 JSON 数据:优雅显示指南

php

在 Laravel Nova 中优雅地显示 Repeater 字段的 JSON 数据

引言

Laravel Nova 是一个强大的 Laravel 管理面板,它使开发人员能够快速轻松地构建自定义的仪表板和管理界面。然而,在使用 Repeater 字段时,显示其保存的 JSON 数据可能颇具挑战性。本文将指导您逐步解决此问题,并在 Laravel Nova 中实现无缝的 JSON 数据显示。

理解 Repeater 字段和 JSON

Repeater 字段允许用户创建和管理动态内容块,例如包含多个联系人的列表或产品目录。这些块以 JSON 格式存储,包含有关每个块及其字段的信息。但是,默认情况下,Laravel Nova 无法正确解析此 JSON 数据。

创建自定义 KeyValue 字段

为了在 Nova 中显示 Repeater 字段的 JSON 数据,我们需要创建自定义 KeyValue 字段。该字段将解析 JSON 并将其转换为 Nova 可用的数组格式。

// NovaServiceProvider.php
use Laravel\Nova\Fields\KeyValue;

public function boot()
{
    parent::boot();

    KeyValue::resolveCallback('repeaterFieldData', function ($value, $resource, $attribute) {
        $repeaterData = collect(json_decode($value, true));
        return $repeaterData->map(function ($item) {
            return $item['fields'];
        })->toArray();
    });
}

使用自定义字段

在您的资源类中使用自定义字段以解析和显示 Repeater 字段的 JSON 数据。

// Resource.php
use Laravel\Nova\Fields\KeyValue;

public function fields(Request $request)
{
    return [
        KeyValue::make('Location Contacts', 'location_contacts')
            ->resolveUsing('repeaterFieldData')
            ->rules('required'),
    ];
}

结果

通过执行这些步骤,您现在可以在 Laravel Nova 的详情视图中正确显示 Repeater 字段保存的 JSON 数据。这种解决方案不仅有效,而且易于实施。

常见问题解答

1. 为什么 Repeater 字段的 JSON 数据无法直接显示?

Repeater 字段的 JSON 数据存储在自定义格式中,默认情况下 Nova 无法解释。

2. 创建自定义 KeyValue 字段有什么好处?

自定义 KeyValue 字段使我们能够解析 JSON 并将其转换为 Nova 可用的数组格式。

3. 如何使用自定义字段?

在您的资源类中使用 resolveUsing('repeaterFieldData') 方法将自定义字段与 Repeater 字段链接。

4. 显示 JSON 数据后会发生什么变化?

Repeater 字段的 JSON 数据将显示为数组格式,每个块及其字段都会被清晰地列出。

5. 此解决方案适用于所有 Nova 版本吗?

此解决方案适用于 Nova 的所有最新版本。