【问题标题】:Laravel middleware working oddlyLaravel 中间件工作异常
【发布时间】:2017-12-28 19:52:19
【问题描述】:

令人惊讶的是 $this->middleware('guest')->except(['create', 'store']) 在 $this->middleware('auth')->except(['index' , '显示']);在 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('/');
    }
}

【问题讨论】:

  • 他们都应该工作得很好。你是什​​么意思“这个中间件不工作而另一个工作”?是什么让你这么说?
  • @SteveChamaillard 当我使用第一个构造时,我可以从访客帐户创建一个帖子。它没有过滤掉请求。
  • 回答你的问题:)

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


【解决方案1】:
$this->middleware('guest')->except(['create', 'store'])

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

逻辑上的意思相同。

第一个代码块的意思是“只有客人可以执行此控制器中的所有请求,除了创建和存储,因此每个人都可以执行这些请求(因为他们不限于客人 仅限)。

第二个代码块的意思是“只有经过身份验证的用户才能执行此控制器中的所有请求,除了 index 和 show 所以每个人都可以执行这些请求(来宾、经过身份验证的用户)。

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

【讨论】:

  • 所以第一个构造有效意味着每个人都可以访问 create() 和 store() 操作,包括来宾?
  • 对你的问题,绝对是的。
猜你喜欢
  • 1970-01-01
  • 2020-08-31
  • 1970-01-01
  • 1970-01-01
  • 2020-04-22
  • 2018-07-07
  • 2016-03-15
  • 2019-11-02
  • 2017-09-10
相关资源
最近更新 更多