我是 Lumen 的新手,我正在尝试通过 Lumen 文档中的示例让角色中间件正常工作: http://lumen.laravel.com/docs/middleware#middleware-parameters
但是一旦我将中间件添加到路由中,如下所示:
$app->get('/', ['middleware' => 'role:editor', 'uses' => 'IndexController@index']);
我收到错误:
at Application->Laravel\Lumen\{closure}('2', 'Missing argument 3 for App\Http\Middleware\RoleMiddleware::handle()', '/Users/peter/app/Http/Middleware/RoleMiddleware.php', '17', array('request' => object(Request), 'next' => object(Closure))) in RoleMiddleware.php line 17
当我删除中间件时,一切都会按预期工作
$app->get('/', ['uses' => 'IndexController@index']);
在app.php中:
$app->middleware([
Illuminate\Cookie\Middleware\EncryptCookies::class,
Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
Illuminate\Session\Middleware\StartSession::class,
Illuminate\View\Middleware\ShareErrorsFromSession::class,
Laravel\Lumen\Http\Middleware\VerifyCsrfToken::class,
App\Http\Middleware\RoleMiddleware::class
]);
应用程序\Http\Middleware\RoleMiddleware.php:
<?php
namespace App\Http\Middleware;
use Closure;
class RoleMiddleware
{
public function handle($request, Closure $next, $role) // <-line 17
{
if (! $request->user()->hasRole($role)) {
// Redirect...
}
return $next($request);
}
}
希望有人能帮忙
最佳答案
似乎您必须将中间件注册为 RouteMiddleware,而不是:
$app->middleware([
Illuminate\Cookie\Middleware\EncryptCookies::class,
Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
Illuminate\Session\Middleware\StartSession::class,
Illuminate\View\Middleware\ShareErrorsFromSession::class,
Laravel\Lumen\Http\Middleware\VerifyCsrfToken::class,
App\Http\Middleware\RoleMiddleware::class
]);
它必须是:
$app->middleware([
Illuminate\Cookie\Middleware\EncryptCookies::class,
Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
Illuminate\Session\Middleware\StartSession::class,
Illuminate\View\Middleware\ShareErrorsFromSession::class,
Laravel\Lumen\Http\Middleware\VerifyCsrfToken::class,
]);
$app->routeMiddleware([
"role" => App\Http\Middleware\RoleMiddleware::class
]);
然后就可以正常工作了!
关于php - Lumen 角色中间件缺少参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34270592/