royduin / laravel-nova-field-dynamic-select
此包已被废弃,不再维护。未建议替代包。
一个 Laravel Nova 字段。
1.10.0
2022-04-25 11:43 UTC
Requires
- php: >=7.1.0
This package is auto-updated.
Last update: 2024-08-05 06:25:20 UTC
README
注意
现在这个功能已包含在 Laravel Nova 中: https://nova.laravel.net.cn/docs/resources/fields.html#dependent-fields
用于 Laravel Nova 的动态选择字段
此字段允许您根据其他动态选择字段中的值动态填充选择框的内容。
该字段基于 nova-belongs-to-dependency,但您可以选择自定义值而不是选择模型。
安装
composer require royduin/laravel-nova-field-dynamic-select
用法
类在 Laravel Nova 默认选择的基础上增加了5个特殊方法。
dependsOn
可以接受一个列表,其中包含此字段依赖的其他字段。在初始页面加载时,列表将为 null,因此在使用之前请务必检查 null。default
可以接受一个列表,其中包含此字段依赖的其他字段。options
可以是数组或可调用对象。forAction
用于指示动态选择是否在操作中运行。colors
(可选)用于选择用于突出显示选项的颜色。接受包含4种不同十六进制颜色的数组highlightBgColor
:光标悬停在选项上时的背景颜色highlightTextColor
:光标悬停在选项上时的文本颜色selectedHighlightBgColor
:光标悬停在所选选项上时的背景颜色selectedHighlightTextColor
:光标悬停在所选选项上时的文本颜色
如果它是一个可调用对象,它将接收一个数组,该数组包含第一个参数为所选依赖值,并应返回要在选择字段上显示的项目数组。
示例
public function fields(Request $request)
{
return [
ID::make()->sortable(),
DynamicSelect::make('Country', 'country')
->options(['US' => 'United States', 'UK' => 'United Kingdom'])
->rules('required')
->colors([
'highlightBgColor' => '#0f0',
'highlightTextColor' => '#fff',
'selectedHighlightBgColor' => '#f00',
'selectedHighlightTextColor' => '#fff',
])
,
DynamicSelect::make('Provider', 'provider')
->options(['PR' => 'Premium', 'ST' => 'Standard'])
->rules('required')
,
DynamicSelect::make('Product', 'product')
->dependsOn(['country', 'provider'])
->options(function($values) {
if($values['country'] === 'UK' && $values['provider'] === 'PR') {
return ['A' => 'Fast shipping', 'B' => 'Normal shipping', 'C' => 'Free shipping'];
} else {
return ['A' => 'Fast shipping', 'B' => 'Normal shipping'];
}
})
->default(function ($values) {
if (! $values) {
return null;
}
if ($values['country'] === 'UK') {
return [
'label' => 'Normal shipping',
'value' => 'B'
];
}
})
->rules('required')
,
];
}
在 Nova 操作中使用示例
public function fields(Request $request)
{
return [
ID::make()->sortable(),
DynamicSelect::make('Country', 'country')
->forAction(self::class)
->options(['US' => 'United States', 'UK' => 'United Kingdom'])
->rules('required')
,
DynamicSelect::make('Provider', 'provider')
->forAction(self::class)
->options(['PR' => 'Premium', 'ST' => 'Standard'])
->rules('required')
,
DynamicSelect::make('Product', 'product')
->forAction(self::class)
->dependsOn(['country', 'provider'])
->options(function($values) {
if($values['country'] === 'UK' && $values['provider'] === 'PR') {
return ['A' => 'Fast shipping', 'B' => 'Normal shipping', 'C' => 'Free shipping'];
} else {
return ['A' => 'Fast shipping', 'B' => 'Normal shipping'];
}
})
->rules('required')
,
];
}