php - Lumen 角色中间件缺少参数

标签 php laravel routes middleware lumen

我是 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/

相关文章:

php - 使用 PHP 从 MySQl 数据库中获取 SUM,然后在 android textview 中打印它

php - 使用不同的 GET 参数动态加载图像

php - 如何在没有pivot的情况下将mysql查询中的行转换为列

php - Laravel 循环问题

javascript - Laravel 获取预期的 url

ruby-on-rails-3 - 子域约束(Rails 3)使本地服务器(瘦)如此慢

php - 我怎样才能使这段代码更简单?

asp.net-mvc - MVC 中的路由不起作用

ruby-on-rails - Rails 3 - 如何更改参数 :id in resources

node.js - 全新安装的 laravel 5.6 中 npm 安装错误