令人惊讶的是$ this->中间件('来宾') - >除了(['创建','存储'])无法正常工作this->中间件(' 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('/');
}
}
答案 0 :(得分:2)
$this->middleware('guest')->except(['create', 'store'])
和
$this->middleware('auth')->except(['index', 'show']);
不在逻辑上意味着相同。
第一个代码块表示“只有访客可以在此控制器中执行所有请求,但创建和存储除外,因此所有人可以执行这些请求(因为他们不仅限于来宾仅限)。
第二个代码块意味着“只有经过身份验证的用户才能执行此控制器中的所有请求,但索引和显示除外,因此所有人可以执行这些请求(来宾,经过身份验证的用户)。
这是因为在Laravel中,没有任何中间件=对任何人都没有过滤器。 except
不会将相反的中间件过滤器应用于路由/方法。