Lumen集成Passport执行migrate报错:Router无middleware方法
问题描述
在Lumen中集成lumen-passport库时,执行php artisan migrate抛出以下错误:
In Facade.php line 338:
Call to undefined method Laravel\Lumen\Routing\Router::middleware()
已添加路由中间件配置:
$app->routeMiddleware([ 'auth' => App\Http\Middleware\Authenticate::class, ]);
以及Passport路由注册代码:
\Dusterio\LumenPassport\LumenPassport::routes($app);
完整app.php代码如下:
<?php require_once __DIR__.'/../vendor/autoload.php'; (new Laravel\Lumen\Bootstrap\LoadEnvironmentVariables( dirname(__DIR__) ))->bootstrap(); date_default_timezone_set(env('APP_TIMEZONE', 'UTC')); $app = new Laravel\Lumen\Application( dirname(__DIR__) ); $app = new \Dusterio\LumenPassport\Lumen7Application( dirname(__DIR__) ); $app->configure('auth'); $app->withFacades(); $app->withEloquent(); $app->singleton( Illuminate\Contracts\Debug\ExceptionHandler::class, App\Exceptions\Handler::class ); $app->singleton( Illuminate\Contracts\Console\Kernel::class, App\Console\Kernel::class ); $app->configure('app'); $app->configure('oracle'); $app->configure('database'); $app->routeMiddleware([ 'auth' => App\Http\Middleware\Authenticate::class, ]); $app->register(App\Providers\AppServiceProvider::class); $app->register(\Illuminate\Mail\MailServiceProvider::class); $app->register(Laravel\Passport\PassportServiceProvider::class); $app->register(Dusterio\LumenPassport\PassportServiceProvider::class); \Dusterio\LumenPassport\LumenPassport::routes($app); $app->router->group([ 'namespace' => 'App\Http\Controllers', ], function ($router) { require __DIR__.'/../routes/api.php'; }); return $app;
解决方案
核心问题
你重复实例化了Application对象:先创建原生Laravel\Lumen\Application,随后又将其覆盖为\Dusterio\LumenPassport\Lumen7Application。后续的routeMiddleware配置依赖原生Application的初始化逻辑,重复赋值导致中间件相关路由方法未正确加载,触发middleware()未定义错误。
修复步骤
- 删除重复的Application实例化代码,仅保留LumenPassport提供的Application类:
// 移除这一行 // $app = new Laravel\Lumen\Application(dirname(__DIR__)); $app = new \Dusterio\LumenPassport\Lumen7Application( dirname(__DIR__) ); - 验证版本匹配:确保你的Lumen版本与lumen-passport版本兼容,
Lumen7Application对应Lumen 7.x,若使用更高版本Lumen,需替换为对应版本的LumenPassport Application类。 - 确认Auth配置:检查
config/auth.php,将API guard的driver设置为passport:'guards' => [ 'api' => [ 'driver' => 'passport', 'provider' => 'users', ], ], - 重新执行
php artisan migrate。
内容的提问来源于stack exchange,提问作者Julián Oviedo
相关产品推荐
相关产品推荐

