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

Laravel出现Illegal offset type错误,寻求解决办法

Laravel 「Illegal offset type」错误(RouteCollection.php:127)全命令触发问题排查

问题概述

  • 错误类型:Illegal offset type
  • 报错位置:vendor\laravel\framework\src\Illuminate\Routing\RouteCollection.php:127
  • 触发场景:执行任何Artisan命令都会触发该错误
  • 已尝试操作:使用ChatGPT提供的refreshNameLookups修改代码,无改善

错误原因分析

Illegal offset type错误本质是用非字符串/整数类型的值作为数组键。对应到报错位置的代码,是$this->nameList[$name] = $route;这行中的$name(路由名称)不是合法的数组键类型(比如是对象、数组这类非标量类型)。

排查与修复步骤

1. 检查所有路由的名称定义

打开项目的routes/web.php和routes/api.php文件,逐个核对路由的name()方法调用:

  • 错误示例(传入对象/数组):
    // 错误:传入对象
    Route::get('/test', [TestController::class, 'index'])->name(new stdClass());
    // 错误:传入数组
    Route::get('/test', [TestController::class, 'index'])->name(['test']);
    
  • 正确示例(传入字符串):
    Route::get('/test', [TestController::class, 'index'])->name('test.index');
    

2. 排查路由组的名称设置

如果使用了路由组,检查组的名称配置:

  • 错误示例:
    Route::group(['name' => ['admin.']], function () {
        // 路由定义
    });
    
  • 正确示例:
    // 方式1:数组配置
    Route::group(['name' => 'admin.'], function () {
        // 路由定义
    });
    // 方式2:链式调用
    Route::name('admin.')->group(function () {
        // 路由定义
    });
    

3. 临时调试定位问题路由(仅临时使用,调试后恢复框架代码)

找到报错的RouteCollection.php文件,定位到refreshNameLookups方法,在赋值前添加类型判断:

public function refreshNameLookups()
{
    $this->nameList = [];

    foreach ($this->allRoutes as $route) {
        if ($route->getName()) {
            $name = $route->getName();
            // 新增判断,打印非法类型的路由详情
            if (!is_string($name) && !is_int($name)) {
                dd('非法路由名称类型:', gettype($name), $route);
            }
            $this->nameList[$name] = $route;
        }
    }
}

执行任意Artisan命令(如php artisan route:list),会直接输出导致错误的路由信息,根据输出修复对应路由即可。

4. 清除路由缓存

如果之前生成过路由缓存,执行命令清除缓存:

php artisan route:clear

内容的提问来源于stack exchange,提问作者A.I75

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 22:17:11