thiktak/filament-nested-builder-form
FilamentPHP 插件 - 嵌套构建表单组件
v1.0.1
2023-09-14 21:01 UTC
Requires
- php: ^8.1
- filament/forms: ^3.0
- illuminate/contracts: ^10.0
- spatie/laravel-package-tools: ^1.15.0
Requires (Dev)
- laravel/pint: ^1.0
- nunomaduro/collision: ^7.9
- nunomaduro/larastan: ^2.0.1
- orchestra/testbench: ^8.0
- pestphp/pest: ^2.0
- pestphp/pest-plugin-arch: ^2.0
- pestphp/pest-plugin-laravel: ^2.0
- phpstan/extension-installer: ^1.1
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-phpunit: ^1.0
- spatie/laravel-ray: ^1.26
This package is auto-updated.
Last update: 2024-09-08 06:21:25 UTC
README

嵌套构建表单(Filament v3 表单)
Filament V3 表单插件。为嵌套构建添加新功能。
安装
您可以通过 composer 安装此包
composer require thiktak/filament-nested-builder-form
用法
在任意表单中
- 调用
NestedBuilder
而不是Builder
- 将所有 Builder 配置放入
nestedConfiguration(Closure)
内。 - 使用
nestedSchema(Closure)
代替schema(Closure | array)
使用 NestedSubBuilder
的 $builder->getLevel()
来了解您所在的位置(级别 1 到 n)
注意
- NestedBuilder 与 Builder 一样,使用数组/json 数据。
use Thiktak\FilamentNestedBuilderForm\Forms\Components\NestedBuilder; use Thiktak\FilamentNestedBuilderForm\Forms\Components\NestedSubBuilder; // ... NestedBuilder::make('array_configuration') // Add configuration to Builder & sub-builder ->nestedConfiguration(function (NestedSubBuilder $builder) { // Apply only for the root level $builder->blockNumbers($builder->getLevel() == 1); // Apply for all others levels $builder->columnSpanFull(); // full width }) // Replace schema() by nestedSchema ->nestedSchema(function (NestedSubBuilder $builder) { // Closure is mandatory return [ Block::make('group') ->schema([ Select::make('title') ->required(), // Call builder importer and call it children $builder->importNestedBlocks('children'), ]), Block::make('rule') ->schema([ TextInput::make('field') ->required(), ]) ]; });
示例
此包的一个具体示例,允许您创建嵌套 AND/OR 字段/条件/值,就像复杂的分组 SQL 查询。
use Thiktak\FilamentNestedBuilderForm\Forms\Components\NestedBuilder; use Thiktak\FilamentNestedBuilderForm\Forms\Components\NestedSubBuilder; // ... NestedBuilder::make('array_configuration') ->nestedConfiguration(function (NestedSubBuilder $builder) { $builder->blockNumbers($builder->getLevel() == 1); $builder->columnSpanFull(); // full width }) ->nestedSchema(function (NestedSubBuilder $builder) { return [ Block::make('group') ->label(sprintf('Group (%s)', $builder->getLevel())) ->schema([ Select::make('condition') ->options(['and' => 'AND', 'or' => 'OR']) ->default('and') ->required(), $builder->importNestedBlocks('children'), ]) ->columns(1), Block::make('rule') ->label(sprintf('Rule (%s)', $builder->getLevel())) ->schema([ TextInput::make('field') ->required() ->columnSpan(2), Select::make('sign') ->options(['=', '<>', '>', '<', 'in(,)']) ->default('=') ->required(), TextInput::make('value') ->columnSpan(3), ]) ->columns(6) ]; });
此包的高级用法示例
它是如何工作的?
您可以通过几行代码实现相同的行为。
- 创建一个带有您的构建器的函数 (
$nested = fn($builder) => [...];
) - 在您的模式中,传递一个在 lambda 函数内部调用自己的函数 (
fn() => $nested($nested)
). - 在您的构建器函数中,添加具有相同逻辑的新 Builder (
Builder::make()->schema(fn() => $builder($builder))
)
示例
use Thiktak\FilamentNestedBuilderForm\Forms\Components\NestedBuilder; use Thiktak\FilamentNestedBuilderForm\Forms\Components\NestedSubBuilder; // ... public static function form(Form $form): Form { $nested = function ($builder) { return [ Block::make('group') ->schema([ Select::make('condition') ->options(['and' => 'AND', 'or' => 'OR']) ->default('and') ->required(), \Filament\Forms\Components\Builder::make('children') ->schema(fn () => $builder($builder)) ]) ->columns(1), Block::make('rule') ->schema([ TextInput::make('field') ->required() ->columnSpan(2), Select::make('sign') ->options(['=', '<>', '>', '<', 'in(,)']) ->default('=') ->required(), TextInput::make('value') ->columnSpan(3), ]) ->columns(6) ]; }; return $form ->schema([ \Filament\Forms\Components\Builder::make('array_configuration') ->schema(fn () => $nested($nested)) ]); }
如果您想实现一个丰富的 SQL 选择器 & 查询构建器,请使用 thiktak/filament-nested-builder-form
测试
composer test
变更日志
请参阅 CHANGELOG 了解最近更改的详细信息。
贡献
请参阅 CONTRIBUTING 了解详细信息。
安全漏洞
请查看 我们的安全策略 了解如何报告安全漏洞。
致谢
许可
MIT 许可证 (MIT)。请参阅 许可文件 了解更多信息。