2017-07-22 27 views
0

令人惊讶的$这个 - >中间件( '客户') - >除([ '创造', '商店']),而这 - $不工作>中间件( '权威性') - >除( ['index','show']);在PostsController上完美运行。两者在逻辑上意味着相同,为什么第一个不工作?这里是PostsController:Laravel中间件工作奇怪

<?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

他们都应该工作得很好。 “这个中间件在另一个工作时不起作用”是什么意思?是什么让你这么说 ? –

+0

@SteveChamaillard当我使用第一个构造时,我可以从来宾帐户创建一个帖子。它不会过滤掉请求。 – SanyamMishra

+1

回答你的问题:) –

回答

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

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

意味着同样的逻辑。

第一个代码块的意思是“唯一的客人可以做所有的请求在此控制器,除了创建和存储等等大家能做到这些要求(如他们不局限于客人只)。

第二代码块的意思是“只有通过验证的用户可以做所有此控制器除了指标的要求,并表示这样大家能做到这些要求(客人,身份验证的用户)。

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

+0

所以首先构造实际上意味着每个人都可以访问create()和存储()动作,包括来宾? – SanyamMishra

+0

对你的问题,绝对是。 –