lupennat/conditionals

该包已被废弃,不再维护。没有推荐替代包。

Laravel Nova - 条件语句

v1.1.0 2023-05-22 13:07 UTC

This package is auto-updated.

Last update: 2023-12-12 11:45:38 UTC


README

  1. 要求
  2. 安装
  3. 用法
    1. 条件字段
    2. 条件多字段

要求

  • php: ^7.4 | ^8
  • laravel/nova: ^4

安装

您可以通过composer在使用Nova的Laravel应用中安装此包

composer require lupennat/conditionals

用法

条件字段

条件字段可以根据其他字段的值切换字段。它使用Nova的本地dependsOn来拦截字段更改,条件将在所有页面(索引、详情、表单)中解析。

use Laravel\Nova\Fields\Boolean;
use Laravel\Nova\Fields\FormData;
use Laravel\Nova\Fields\Hidden;
use Laravel\Nova\Fields\Number;
use Laravel\Nova\Fields\Select;
use Laravel\Nova\Fields\Text;
use Laravel\Nova\Http\Requests\NovaRequest;
use Lupennat\Conditionals\Conditional;

class Item extends Resource
{

    public function fields(Request $request)
    {
        return [
            Select::make(__('Type'), 'type')->options([
                'boolean' => 'Boolean',
                'number' => 'Number',
                'not-exists' => 'No Value',
                'text' => 'Text'
            ]),
            Conditional::make(__('Value'))
                ->dependsOn(['type'], function (Conditional $field, NovaRequest $novaRequest, FormData $formData) {
                    return match ($formData->type) {
                        'boolean' => Boolean::make(__('Value'), 'value')->rules('required')
                        'number' => Number::make(__('Value'), 'value')->rules('required', 'min:10', 'max:100'),
                        'text' => Text::make(__('Value'), 'value')->rules('required'),
                        default =>  Hidden::make(__('Value'), 'value')->nullable()->fillUsing(function ($request, $model, $attribute) {
                            // always reset value to null
                            $model->{$attribute} = null;
                        })
                    }
                }),
        ];
    }
}

如果您不希望存储/更改值,可以返回null而不是字段。
当返回null时,将使用不可填写的字段。

条件字段

条件多字段可以用于显示任何多关系的单个字段。

use Laravel\Nova\Fields\Boolean;
use Laravel\Nova\Fields\FormData;
use Laravel\Nova\Fields\Hidden;
use Laravel\Nova\Fields\Number;
use Laravel\Nova\Fields\Select;
use Laravel\Nova\Fields\Text;
use Laravel\Nova\Http\Requests\NovaRequest;
use Lupennat\Conditionals\ConditionalMany;

class ItemList extends Resource
{

    public function fields(Request $request)
    {
        return [
            ID::make()->sortable(),
            ConditionalMany::make('Item Value', 'items')
                ->each(
                    function ($item) {
                        return match ($item->type) {
                            'boolean' => Boolean::make(__('Value'), 'value')
                            'number' => Number::make(__('Value'), 'value'),
                            'text' => Text::make(__('Value'), 'value'),
                            default =>  Hidden::make(__('Value'), 'value')
                        }
                    }
                )
        ];
    }
}

条件多字段只能在索引和详情页上使用。