2017-07-22 42 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

對你的問題,絕對是。 –