Laravel 8新增bn语言包报Undefined array key "bn"错误如何解决
解决方案
按以下顺序排查修复即可解决报错:
- 第一步:清除Laravel配置缓存
你修改了config目录下的配置文件后,Laravel默认会读取已缓存的旧配置,运行以下命令清除配置缓存:
同步清除路由、视图缓存避免其他缓存冲突:php artisan config:clearphp artisan route:clear php artisan view:clear - 第二步:补充LocaleController参数校验
你的控制器没有对传入的语言码做合法性校验,异常的非法参数也会引发数组键不存在报错,修改控制器代码如下:<?php namespace App\Http\Controllers; /** * Class LocaleController. */ class LocaleController { /** * @param $locale * @return \Illuminate\Http\RedirectResponse */ public function change($locale) { // 校验语言码是否在可用配置中 if (!array_key_exists($locale, config('boilerplate.locale.languages'))) { abort(404); } app()->setLocale($locale); session()->put('locale', $locale); return redirect()->back(); } } - 第三步:优化语言下拉菜单渲染逻辑
你当前用到的getLocaleName辅助函数如果没有内置bn语言的映射,也会引发数组键不存在报错,直接用配置文件里的name字段更稳妥,修改lang.blade.php代码:<div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarDropdownLanguageLink"> @foreach(collect(config('boilerplate.locale.languages'))->sortBy('name') as $code => $details) @if($code !== app()->getLocale()) <x-utils.link class="dropdown-item pt-1 pb-1" :href="route('locale.change', $code)" :text="__($details['name'])" /> @endif @endforeach </div><!--dropdown-menu--> - 第四步:检查LocaleMiddleware逻辑
确认你的App\Http\Middleware\LocaleMiddleware中判断语言合法性时,读取的是boilerplate.locale.languages配置数组,而非其他硬编码的语言列表,避免出现配置已加但中间件未识别的问题。
内容的提问来源于stack exchange,提问作者Tamim Wasifjd
相关产品推荐
相关产品推荐

