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

Laravel 11自定义路由文件中Route Model Binding失效求助

问题分析与解决方案

核心原因

Laravel 11的api路由组默认自动注册了SubstituteBindings中间件,这个中间件是路由模型绑定的核心逻辑载体。但你通过then闭包加载的admin.php路由组,并没有自动继承这个关键中间件,导致模型绑定流程无法触发,最终返回空的模型实例(打印显示为[])。

解决方法

方法1:给admin路由组手动添加SubstituteBindings中间件

修改bootstrap/app.php中的路由配置,在加载admin路由时显式绑定该中间件:

return Application::configure(basePath: dirname(__DIR__))
    ->withRouting(
        api: __DIR__.'/../routes/api.php',
        apiPrefix: '',
        then: function () {
            Route::prefix('')
                ->middleware(\Illuminate\Routing\Middleware\SubstituteBindings::class)
                ->group(base_path('routes/admin.php'));
        },
    )
    ->withMiddleware(function (Middleware $middleware) {
    })
    ->withExceptions(function (Exceptions $exceptions) {
        $exceptions->shouldRenderJsonWhen(fn() => true);
    })
    ->create();

方法2:将admin路由纳入api路由集合

Laravel 11允许api参数接收数组,直接把admin.php加入api路由列表,这样会自动继承api组的所有默认中间件(包括SubstituteBindings):

return Application::configure(basePath: dirname(__DIR__))
    ->withRouting(
        api: [
            __DIR__.'/../routes/api.php',
            __DIR__.'/../routes/admin.php',
        ],
        apiPrefix: '',
    )
    ->withMiddleware(function (Middleware $middleware) {
    })
    ->withExceptions(function (Exceptions $exceptions) {
        $exceptions->shouldRenderJsonWhen(fn() => true);
    })
    ->create();

额外说明

如果之前尝试用web参数加载admin路由,触发CSRF是因为web组默认启用了VerifyCsrfToken中间件。若要走web路由但关闭CSRF验证,可在admin路由组单独排除:

Route::prefix('')
    ->withoutMiddleware(\Illuminate\Foundation\Http\Middleware\VerifyCsrfToken::class)
    ->middleware(\Illuminate\Routing\Middleware\SubstituteBindings::class)
    ->group(base_path('routes/admin.php'));

但这种方式不如直接复用api组配置更适配后台接口场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 15:52:40