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

Laravel路由分组中无法传递路由参数的问题排查

Laravel路由配置错误排查与修正

错误点分析

  1. 路由分组闭包参数误用
    路由分组的闭包函数接收的是Illuminate\Routing\Router实例,并非URL中的路由参数。你把$projectid作为闭包参数传入,会导致类型不匹配的错误,这就是触发Argument #1 ($projectid) must be of type int, Illuminate\Routing\Router given的原因。

  2. 路由正则表达式无效
    你写的where(["projectid"=>"[0..9]+"])是错误的正则规则,正确的数字匹配表达式应该是[0-9]+或者\d+。

  3. 控制器方法参数错误
    add方法处理的是POST新增请求,URL中并没有projectid参数,不需要在方法中声明int $projectid,否则会触发参数缺失的异常。

  4. 缺少/api前缀
    你需要的路由是/api/projects开头,但当前路由仅配置了projects前缀,没有包含api,导致路由无法匹配预期的URL路径,这是出现404的核心原因之一。

修正后的代码

路由文件

Route::prefix('api')
    ->group(function(): void {
        Route::prefix('projects')
            ->group(function(): void {
                Route::get('/', [ProjectsController::class, 'all']);
                Route::post('/', [ProjectsController::class, 'add']);

                Route::prefix('{projectid}')
                    ->where(['projectid' => '[0-9]+'])
                    ->group(function(): void {
                        Route::get('/', [ProjectsController::class, 'one']);
                        Route::put('/', [ProjectsController::class, 'update']);
                        Route::delete('/', [ProjectsController::class, 'delete']);
                    });
            });
    });

控制器文件

<?php

namespace App\Http\Controllers;

class ProjectsController extends SecureController
{
    public function all()
    {
        return "projects";
    }

    public function one(int $projectid)
    {
        return "project " . $projectid;
    }

    public function add()
    {
        // 处理新增逻辑,参数从请求中获取,比如 request()->input('xxx')
    }

    public function update(int $projectid)
    {
        // 处理更新逻辑
    }

    public function delete(int $projectid)
    {
        // 处理删除逻辑
    }
}

内容的提问来源于stack exchange,提问作者Simple Fellow

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 07:15:09