Laravel的中间件不在Controller上工作

ome*_*ooq 4 middleware laravel laravel-5

我有一个名为'AdminMiddleware'的中间件,它正在类的构造函数中使用.由于某些原因,虽然正在运行构造函数,但是没有从构造函数中调用中间件.我尝试在adminMiddleware文件上进行模具转储,但似乎只是忽略了这个文件.

namespace App\Http\Controllers\SuperAdmin;

    use Illuminate\Http\Request;

    use App\Http\Requests;
    use App\Http\Controllers\Controller;
    use Illuminate\Support\Facades\Auth;

        class dashboard extends Controller
        {
            protected $user;

            public function __construct()
                {
                    $this->middleware('admin');
                    $this->user = Auth::User();
                }

//Kernel.php
    protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'superadmin' => \App\Http\Middleware\SuperAdminMiddleware::class,
        'admin' => \App\Http\Middleware\AdminMiddleware::class,
    ];
Run Code Online (Sandbox Code Playgroud)

对于某些项目要求,我无法直接在路线上使用中间件.任何帮助表示赞赏,我正在使用laravel 5.1.

jed*_*ylo 6

您需要做两件事来在控制器中启用中间件:

  1. 在App\Http\Kernel.php中的$ routeMiddleware中注册中间件

    protected $ routeMiddleware = ['admin'=>'App\Http\Middleware\AdminMiddleware',];

  2. 使用中间件的密钥而非类名在控制器中启用中间件:

    $这个 - >中间件( '管理员');

  • 好吧,我已将 'admin' => \App\Http\Middleware\AdminMiddleware 添加到 $routeMiddleware 数组中,但它仍然不起作用。但它适用于 $globalMiddleware 数组,但一旦我这样做,我就无法注销。我也尝试过 'admin' => \App\Http\Middleware\AdminMiddleware::class, (2认同)
  • 如果您以这种方式运行控制器操作,难怪不会执行中间件。Laravel 内核在内核处理传入请求时和调用操作之前调用中间件。如果您按照您的方式执行控制器方法,它将不起作用。 (2认同)

Joh*_*ete 6

我遇到了同样的问题,显然路由缓存也缓存了中间件。

所以php artisan route:clear在我的情况下解决了它。