如何解决parfaitementweb/filament-country-field插件的国家键名小写化报错问题?
如何解决parfaitementweb/filament-country-field插件的国家键名小写化报错问题?
嗨,我来帮你搞定这个问题~
首先说下你遇到报错的原因:你现在用的map()方法并不是修改这个插件国家选项键名的正确方式,插件的这个方法可能并不支持直接传入闭包来修改选项集合,所以才会出现「array_keys()期望数组,却收到了闭包」的错误。
那正确的做法应该是通过options()方法来自定义国家选项,手动把键名转成小写。你可以试试下面的代码:
Country::make('country') ->options(function () { // 获取插件默认的国家选项集合 $originalCountries = \Parfaitementweb\FilamentCountryField\Forms\Components\Country::getDefaultOptions(); // 将所有国家的键名转为小写,同时保留原标签 $lowercaseKeyCountries = collect($originalCountries)->mapWithKeys(function ($label, $key) { return [strtolower($key) => $label]; })->toArray(); return $lowercaseKeyCountries; }),
简单解释下这段代码:
- 我们先调用插件的
getDefaultOptions()方法拿到原始的国家选项(如果这个方法不存在,你也可以直接用插件内置的国家列表数组,或者从Laravel的countries辅助函数获取,看插件的实现逻辑) - 然后用
collect()把数组转成集合,通过mapWithKeys()遍历每个国家,把键名转成小写,同时保留原来的显示标签 - 最后转成数组返回给
options()方法,这样字段就会使用小写的键名了
另外还要注意:确保你数据库里存储国家的字段值都是小写的,这样提交表单的时候才能正确匹配对应的值哦。
备注:内容来源于stack exchange,提问作者Petro Gromovo
相关产品推荐
相关产品推荐

