Php Laravel中间件不工作

Php Laravel中间件不工作,php,laravel,routes,laravel-5.3,middleware,Php,Laravel,Routes,Laravel 5.3,Middleware,我有一个中间件类:- <?php namespace App\Http\Middleware; use Closure; class isAdmin { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ pu

我有一个中间件类:-

<?php

namespace App\Http\Middleware;


use Closure;

class isAdmin
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if(auth()->user()->getIsAdminAttribute()){

            return $next($request);


        }
        abort(404);
    }
}
我已经试着把它扔掉了

dd(auth()->user()->getIsAdminAttribute());

没有发生任何事情,就像我根本没有将isAdmin中间件分配给该路由一样。

您可以使用以下命令检查分配给它们的路由和中间件:

php artisan route:list
应该是这样的:

+--------+----------+-------------+------------+-------------------------------------------------+--------------+
| Domain | Method   | URI         | Name       | Action                                          | Middleware   |
+--------+----------+-------------+------------+-------------------------------------------------+--------------+
|        | GET|HEAD | /           |            | Closure                                         | web          |
|        | GET|HEAD | users/list  | List_Users | App\Http\Controllers\UsersController@listUsers  | web,isAdmin  |
+--------+----------+-------------+------------+-------------------------------------------------+--------------+

注意中间件列中的isAdmin。

您可以使用以下命令检查分配给它们的路由和中间件:

php artisan route:list
应该是这样的:

+--------+----------+-------------+------------+-------------------------------------------------+--------------+
| Domain | Method   | URI         | Name       | Action                                          | Middleware   |
+--------+----------+-------------+------------+-------------------------------------------------+--------------+
|        | GET|HEAD | /           |            | Closure                                         | web          |
|        | GET|HEAD | users/list  | List_Users | App\Http\Controllers\UsersController@listUsers  | web,isAdmin  |
+--------+----------+-------------+------------+-------------------------------------------------+--------------+

请注意中间件列中的isAdmin。

我知道对你来说已经晚了,但也许其他人会从中受益,
我也遇到了同样的问题,经过一些调试后,我发现问题middlware没有被触发,并且出现在route:list中,因为route::get'post/{id},即使我将此路由放在面临问题的路由之后route::get'post/create',我将放映路线从一个帖子改为另一个帖子,中间件又被炒了。

我知道你已经晚了,但也许其他人会从中受益,
我也遇到了同样的问题,经过一些调试后,我发现由于路由::get'post/{id}的原因,middlware没有被触发并出现在route:list中,即使我将此路由放在面临问题的路由之后route::get'post/create,我将显示路由从post更改为post,中间件再次被触发。

首先,我想你应该检查一下这个。在您的示例中,您使用用户模型的getIsAdminAttribute方法,但在本例中,它应该作为is_admin方法使用。auth->user->is\u admin。所以请先检查一下。@Pavel谢谢你的回复,你的回答完全正确,但即使我想更改代码,我也无法检查它是否有效,因为正如我提到的,我在中间件类中尝试了ddauth->user->getIsAdminAttribute;或键入任何错误的内容,无错误显示给我。如果中间件确实可以工作,并且它可以对请求进行文件管理,那么至少它应该显示errortry ddauth->user@Sohel0415,即使如此,我也无法找出我的中间件语法是否有错误,如果中间件完全不工作,我的情况是将中间件分配给该路由不会影响对该路由的请求->中间件“isAdmin”,就像我没有为该路由分配任何中间件一样。尝试使用完全限定的类route::get'users/list','UsersController@listUsers'->name'List_Users'->middlewareisAdmin::class1首先,我想你应该检查一下这个。在您的示例中,您使用用户模型的getIsAdminAttribute方法,但在本例中,它应该作为is_admin方法使用。auth->user->is\u admin。所以请先检查一下。@Pavel谢谢你的回复,你的回答完全正确,但即使我想更改代码,我也无法检查它是否有效,因为正如我提到的,我在中间件类中尝试了ddauth->user->getIsAdminAttribute;或键入任何错误的内容,无错误显示给我。如果中间件确实可以工作,并且它可以对请求进行文件管理,那么至少它应该显示errortry ddauth->user@Sohel0415,即使如此,我也无法找出我的中间件语法是否有错误,如果中间件完全不工作,我的情况是将中间件分配给该路由不会影响对该路由的请求->中间件“isAdmin”,就像我没有为该路由分配任何中间件一样。尝试使用完全限定的类route::get'users/list','UsersController@listUsers'->name'List_Users'->middlewareisAdmin::class