Laravel中间件奇怪地工作

时间:2017-07-22 23:06:27

标签: php laravel laravel-5.4 middleware laravel-middleware

令人惊讶的是$ 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('/');
    }
}

1 个答案:

答案 0 :(得分:2)

$this->middleware('guest')->except(['create', 'store'])

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

在逻辑上意味着相同。

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

第二个代码块意味着“只有经过身份验证的用户才能执行此控制器中的所有请求,但索引和显示除外,因此所有人可以执行这些请求(来宾,经过身份验证的用户)。

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