armincms/json

一个 Laravel Nova 字段。

0.5.2 2020-03-12 08:52 UTC

This package is auto-updated.

Last update: 2024-09-18 13:32:27 UTC


README

laravel nova 字段

目录

安装

composer require armincms/json

使用

非常简单。


  use Armincms\Json\Json;  
  

  Json::make("ColumnName", [ 
      Select::make(__("Discount Type"), "type")
          ->options([
              'percent' => __('Percent'),
              'amount' => __('Amount'),
          ])->rules('required')->default('percent'),
      Number::make(__("Discount Value"), "value")
          ->rules("min:0")
          ->withMeta([
              'min' => 0
          ]),   
  ]),

嵌套使用

存储嵌套数据与直接数据非常相似。就像以下这样;使用Json嵌套。

  use Armincms\Json\Json;  
  

  Json::make("ColumnName", [ 
      Select::make(__("Discount Type"), "type")
          ->options([
              'percent' => __('Percent'),
              'amount' => __('Amount'),
          ])->rules('required')->default('percent'),
      Number::make(__("Discount Value"), "value")
          ->rules("min:0")
          ->withMeta([
              'min' => 0
          ]),   
      // nested data
      Json::make("discount", [ 
        Select::make(__("Discount Type"), "type")
            ->options([
                'percent' => __('Percent'),
                'amount' => __('Amount'),
            ])->rules('required')->default('percent'),
        Number::make(__("Discount Value"), "value")
            ->rules("min:0")
            ->withMeta([
                'min' => 0
            ]),   
      ]),
  ]),

操作使用

可以在操作中使用Json,如下所示

use Armincms\Json\Json;

class UpdateTime extends Action
{
    use InteractsWithQueue, Queueable, SerializesModels; 


    /**
     * Perform the action on the given models.
     *
     * @param  \Laravel\Nova\Fields\ActionFields  $fields
     * @param  \Illuminate\Support\Collection  $models
     * @return mixed
     */
    public function handle(ActionFields $fields, Collection $models)
    {
      //
    }


    /**
     * Get the fields available on the action.
     *
     * @return array
     */
    public function fields()
    {
        return collect([
            /// some fields
            
            Json::make(mb_strtolower($meal), [
                Text::make(__("From"), 'from')->rules('required'),
                Text::make(__("Until"), 'until')->rules('required'),  
                Json::make(mb_strtolower($meal), [
                    Text::make(__("From"), 'from'),
                    Text::make(__("Until"), 'until'),  
                ]),
            ]),

            /// some fields
        ])->map(function($field) {
            return $field instanceof Json ? $field->fields() : [$field];
        })->flatten()->all();
    }
}


显示和隐藏字段

您可以使用JSON字段的show/hide方法。因此,此方法将在Json字段下的每个字段上调用。以下示例将隐藏index视图中的所有字段。

  use Armincms\Json\Json;  
  

  Json::make("ColumnName", [ 
       // fields
  ])->hideFromIndex(),

保存最后值

默认情况下,我们清理最后的数据以存储新数据。但是,可以保存最后的数据。为此,请在父Json类上调用saveHistory方法。这会导致我们覆盖新数据而不清理最后的数据。请参见以下内容

  use Armincms\Json\Json;  
  

  Json::make("ColumnName", [ 
       // fields
  ])->saveHistory(),

分离数据

如果您想在一个列中存储字段但分别在单独的位置显示,您应该使用一个名称创建多个Json字段。请参见以下内容

  use Armincms\Json\Json;  
  

  Json::make("ColumnName", [ 
       // fields group 1
  ]),

  // other feilds


  Json::make("ColumnName", [ 
       // fields group 2
  ])->saveHistory(),

  • 注意:在这种情况下,您应该为下一个Json字段使用saveHistory

填充值

如果您想存储字段的自定义值,可以使用fillUsing方法并返回自定义值。请参见以下内容

  • fillUsing接受三个参数 $request$attribute$requestAttribute
  use Armincms\Json\Json;  
  

  Json::make("ColumnName", [ 
       Number::make(__("Discount Value"), "value")
            ->rules("min:0")
            ->withMeta([
                'min' => 0
            ])->fillUsing(function($request, $attribute, $requestAttribute) {
                if($request->exists($requestAttribute)) { 
                    return $request[$requestAttribute];
                }

                return 1000;
            }), 
  ]),
  

空值

如果需要将某些值存储为null,可以使用类似于Nova nullable的nullable方法。默认情况下,nullable具有true值,这意味着所有值都将被存储。但是,可以通过将false值传递到nullable方法中来拒绝存储空值。

自动转换

如果没有为字段属性定义JSON转换,我们将把字段值转换为JSON。如果您需要禁用此功能,请使用ignoreCasting方法;

关于实现

也许有人会问这个包是如何工作的?

我应该说,这个包没有与Vuejs相对应的组件。这个包只是使用回调来存储数据。因此,不会更改任何字段。

使用此实现,您可以访问原始字段而无需更改。因此,与其他包或字段交互时,存在toArray方法来访问定义的字段。