You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 09:55:30