Laravel应用多语言切换中间件报错:Undefined array key 'default_language'
解决Laravel多语言切换中间件「Undefined array key 'default_language'」错误
错误原因
getSuperAdminSettingValue()返回的数组中不存在default_language键,或者函数返回结果不符合预期的数组结构;另外直接访问->value也存在风险——如果default_language存在但不是对象,会触发新的错误。
修复后的代码
public function handle(Request $request, Closure $next): Response { $localeLanguage = \Session::get('languageChangeName'); $settings = getSuperAdminSettingValue(); // 先判断数组键是否存在,再安全获取value属性 $defaultLanguage = isset($settings['default_language']) ? $settings['default_language']->value : null; if (!isset($localeLanguage)) { // 用空合并运算符简化默认值处理 \App::setLocale($defaultLanguage ?: 'en'); } else { \App::setLocale($localeLanguage); } return $next($request); }
额外排查建议
- 临时在代码中添加
dd($settings),查看getSuperAdminSettingValue()的返回结构,确认是否包含default_language键。 - 检查后台超级管理员设置页面,确保
default_language选项已正确配置且value字段有有效值。 - 优化
getSuperAdminSettingValue()函数,让它在没有数据时返回默认数组(比如return [];),避免返回非数组类型导致报错。
内容的提问来源于stack exchange,提问作者Manunyi
相关产品推荐
相关产品推荐

