【问题标题】:Laravel Controller Middleware for Resources用于资源的 Laravel 控制器中间件
【发布时间】:2016-11-02 14:48:20
【问题描述】:

我正在尝试在资源路由上使用中间件。

我的路线 -> Route::resource('posts', 'PostController');

我的中间件 ->

$user = Auth::user();

    if(Auth::check()) {
        if($user->is_admin) {
           return $next($request);
        } else {
            return redirect()->route('home');
        } 
    } else {
        return redirect()->route('login');
    }

我的控制器构造器 ->

$this->middleware('auth'); $this->middleware('admin')->only('posts.destroy');

我的目标是只让管理员销毁帖子,而不是其他人。

但是当我使用 php artisan route:list,显示的中间件是web,auth。

我在这里做错了什么?

【问题讨论】:

  • 你在内核中注册了中间件吗?无论如何,请参阅here
  • @Andrew Ya 添加为'admin' => \App\Http\Middleware\AdminMiddleware::class,
  • 为了论证,尝试全局添加中间件,看看它是否命中。就像用路由组包装所有路由并将die() 或其他东西放在中间件本身并访问任何路由。
  • @Andrew 如果我只添加$this->middleware('admin'); 它显示在php artisan route:list 下但我希望它仅适用于某些路线。有什么解决办法吗?
  • 我们可以解决一些问题,只是想确保它有效。

标签: php laravel-5 laravel-middleware


【解决方案1】:

你可以试试:

$this->middleware('admin')->only('destroy');

Docs

【讨论】:

  • 谢谢!这样可行!我的路线被命名为posts.destroy,所以我认为这可行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-29
  • 1970-01-01
  • 2014-10-07
  • 2020-12-09
  • 2017-12-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多