Laravel 中间件运行异常

Laravel middleware working oddly

令人惊讶的是 $this->middleware('guest')->except(['create', 'store']) 在 $this->middleware('auth')->除了(['index', 'show']);在 PostsController 上完美运行。两者在逻辑上意味着相同,那么为什么第一个不起作用?这是 PostsController:

<?php

namespace App\Http\Controllers;

use App\Post;

class PostsController extends Controller
{

    public function __construct() {
      $this->middleware('auth')->except(['index', 'show']);
    }

    public function index() {
      $posts = Post::latest()->get();
      return view('posts.index', compact('posts'));
    }

    public function show(Post $post) {
      return view('posts.show', compact('post'));
    }

    public function create() {
      return view('posts.create');
    }

    public function store() {

      $this->validate(request(), [
        'title' => 'required',
        'body' => 'required'
      ]);

      Post::create([
        'title' => request('title'),
        'body' => request('body'),
        'user_id' => auth()->id()
      ]);

      return redirect('/');
    }
}
$this->middleware('guest')->except(['create', 'store'])

$this->middleware('auth')->except(['index', 'show']);

逻辑上不一样

第一个代码块表示“只有来宾可以执行此控制器中的所有请求,创建和存储除外,因此 每个人 都可以执行这些请求(因为它们不受限制仅限客人)。

第二个代码块表示“只有经过身份验证的用户才能执行此控制器中的所有请求,索引和显示除外,因此 每个人 都可以执行这些请求(访客,经过身份验证的用户) .

这是因为在 Laravel 中,没有中间件 = 没有对任何人的过滤器。 except 不会将相反的中间件过滤器应用于 route/method。