Laravel 的中间件无法在 Controller 上运行

Laravel's Middleware not working on Controller

我有一个名为 'AdminMiddleware' 的中间件,它正在 class 的构造函数中使用。由于某种原因,虽然构造函数正在 运行,但未从构造函数调用中间件。我尝试在 adminMiddleware 文件上进行 die dump,但它似乎只是忽略了这个文件。

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,
    ];

对于某些项目需求,我不能直接在路由上使用中间件。感谢任何帮助,我正在使用 laravel 5.1.

你需要做两件事来启用控制器中的中间件:

  1. 在你的App\Http\Kernel.php

    的$routeMiddleware中注册中间件

    受保护的 $routeMiddleware = [ 'admin' => 'App\Http\Middleware\AdminMiddleware', ];

  2. 在控制器中启用中间件,使用中间件的密钥,而不是class名称:

    $this->middleware('admin');

我也遇到了同样的问题,用composer dump-autoload解决了。 我的问题是更改文件名而不是重新生成自动加载。 希望对你有用。

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

所以php artisan route:clear解决了我的问题。