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。
令人惊讶的是 $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。