Laravel的中间件不在Controller上工作

时间:2015-07-14 22:43:12

标签: laravel laravel-5 middleware

我有一个名为'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,
    ];

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

3 个答案:

答案 0 :(得分:6)

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

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

    protected $ routeMiddleware = [     'admin'=> '应用程序\ HTTP \中间件\ AdminMiddleware', ];

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

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

答案 1 :(得分:1)

我有同样的问题,并通过composer dump-autoload解决它。 我的问题是更改文件名,而不是重新生成自动加载。 我希望它适合你。

答案 2 :(得分:0)

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

因此php artisan route:clear解决了我的情况。