crayon/nova-additional-fields

一个 Laravel Nova 扩展包,允许您动态地将输入添加到您的资源中。

1.0.0 2021-03-25 22:59 UTC

This package is auto-updated.

Last update: 2024-09-26 06:51:50 UTC


README

一个 Laravel Nova 扩展包,允许您根据数据库表动态地将输入添加到您的资源中。

安装

composer require crayon/nova-additional-fields

文档

假设您正在构建一个电子商务网站,并且您有不同类型的产品。如果您想让网站的管理员为每个产品输入自定义值,这将会很麻烦。

因此,此包允许您在 Nova 资源中定义表单输入;

迁移

产品字段(每个字段属于一个类别)

Schema::create('product_fields', function (Blueprint $table) {
    $table->id();
    $table->json('text');
    $table->string('type');
    $table->string('name');
    $table->text('options')->nullable();
    $table->unsignedBigInteger('category_id');
    $table->softDeletes();
    $table->timestamps();

    $table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade');
});

资源使用

附加字段将从端点加载(属于我们选择的类别的字段)

AdditionalFields::make('Additional Fields', 'fields')
    ->parent('category')
    ->endpoint('/api/category/{category}/fields')
    ->hideFromIndex(),

端点

路由

Route::get('/category/{category}/fields', [\App\Http\Controllers\Api\NovaHelpers\NovaCategoryController::class, 'fields']);

控制器

/**
 * Get available fields by Category ID
 *
 * @param $category
 * @return mixed
 */
public function fields($category)
{
    return Category::findOrFail($category)->fields->map(fn($field) => [
        'id' => $field->id,
        'text' => $field->text,
        'type' => $field->type,
        'name' => $field->name,
        'options' => $field->options
    ]);
}

根据您添加到数据库中的字段,字段将被加载到您的资源中。ProductFields 资源请在此处找到 here

屏幕截图

nova-additional-fields nova-additional-fields

结论

Laravel Nova 是一款非常棒的软件,在构建管理面板时将提高您的生产力。通过自定义包和字段进行一些定制后,您就准备好摇滚了。