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

Laravel9调用in_array()提示$haystack需为数组实际为null报错排查

报错根因

in_array()要求第二个传入参数必须是数组,当前报错说明代码中传入的$access_pass实际值为null。
问题出在$access_pass = config('web.offlinePass');这行,Laravel读取不到对应配置项时会默认返回null,常见触发场景:

  • config/web.php配置文件中未定义offlinePass键
  • 修改配置后未清理配置缓存,Laravel仍加载旧的缓存配置,无法识别新增的配置项
  • 配置文件中offlinePass对应值本身为null,或被误设为字符串、数字等非数组类型
修复步骤
  1. 先确认配置格式正确
    打开config/web.php,确保offlinePass配置项为数组格式,参考示例:
// config/web.php
return [
    // 其余原有配置项保持不变
    'offlinePass' => [
        'pass123',
        'work2024',
        'staff_access_01'
        // 所有有效通行码全部写入该数组
    ],
];

注意:如果业务逻辑里通行码只有1个、不需要多码校验,就不要用in_array,直接做字符串等值判断即可,没必要硬套数组逻辑。

  1. 清理配置缓存
    在项目根目录执行artisan命令,清除旧的配置缓存:
php artisan config:clear

生产环境更新配置后可以执行缓存命令提升加载性能:

php artisan config:cache
  1. 给代码增加类型兜底,避免后续因配置异常抛出报错
    修改原方法逻辑,给配置读取加默认值,同时强制校验参数类型,从代码层面杜绝类型错误:
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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 21:01:15