armincms / json
一个 Laravel Nova 字段。
0.5.2
2020-03-12 08:52 UTC
Requires
- php: >=7.1.0
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
方法来访问定义的字段。