Laravel9调用in_array()提示$haystack需为数组实际为null报错排查
报错根因
in_array()要求第二个传入参数必须是数组,当前报错说明代码中传入的$access_pass实际值为null。
问题出在$access_pass = config('web.offlinePass');这行,Laravel读取不到对应配置项时会默认返回null,常见触发场景:
config/web.php配置文件中未定义offlinePass键- 修改配置后未清理配置缓存,Laravel仍加载旧的缓存配置,无法识别新增的配置项
- 配置文件中
offlinePass对应值本身为null,或被误设为字符串、数字等非数组类型
修复步骤
- 先确认配置格式正确
打开config/web.php,确保offlinePass配置项为数组格式,参考示例:
// config/web.php return [ // 其余原有配置项保持不变 'offlinePass' => [ 'pass123', 'work2024', 'staff_access_01' // 所有有效通行码全部写入该数组 ], ];
注意:如果业务逻辑里通行码只有1个、不需要多码校验,就不要用
in_array,直接做字符串等值判断即可,没必要硬套数组逻辑。
- 清理配置缓存
在项目根目录执行artisan命令,清除旧的配置缓存:
php artisan config:clear
生产环境更新配置后可以执行缓存命令提升加载性能:
php artisan config:cache
- 给代码增加类型兜底,避免后续因配置异常抛出报错
修改原方法逻辑,给配置读取加默认值,同时强制校验参数类型,从代码层面杜绝类型错误:
public function access(Request $request) { // 读取配置,默认值设为空数组 $access_pass = config('web.offlinePass', []); // 二次校验:如果配置值不是数组,强制重置为空数组 if (!is_array($access_pass)) { $access_pass = []; } if (!in_array($request->pass, $access_pass)) { return back()->withErrors(['The password entered is incorrect!']); } session()->put('admins_only', $request->pass); session()->save(); return redirect()->route('website.dash.dash'); }
内容的提问来源于stack exchange,提问作者CryptoPath
相关产品推荐
相关产品推荐

