2015-10-16 74 views
0

我的問題是關於:
通過[email protected]函數調用
個人博客文章的網頁通過[email protected]函數調用,
評論形式的博客主頁嵌入到個人博客文章頁面,將張貼到blog/{blog}/comment並且將調用[email protected]方法爲什麼我的網頁的請求需要驗證?

我有關注以下途徑在我routes.php文件中定義:

Route::resource  ('blog',     'ArticlesController'); 

Route::resource  ('blog/{blog}/comment',  'CommentsController'); 

ArticlesController設置調用auth中間件的所有功能,除了index()show($id)

public function __construct() 
{ 
    $this->middleware('auth', ['except' => 'index', 'show']); 
} 

當我試圖訪問個人博客帖子頁無評論表單,它將按預期工作,讓我來訪問主頁和單獨的帖子頁面而無需驗證。

當我將評論表單嵌入到各個帖子頁面時,它允許我訪問主頁,但要求我在進入各個帖子頁面之前進行驗證。

任何人都可以告訴我爲什麼它的行爲,即使我的CommentsController是一個單獨的實體,它不是調用auth中間件?

回答

2

except參數應該是一個數組如果你看一下code的中間件方法根據註釋

public function __construct() 
{ 
    $this->middleware('auth', ['except' => ['index', 'show']]); 
} 

更新,如果尋找一個陣列。

/** 
* Register middleware on the controller. 
* 
* @param string $middleware 
* @param array $options 
* @return void 
*/ 
public function middleware($middleware, array $options = []) 
{ 
    $this->middleware[$middleware] = $options; 
} 

至於爲什麼它的工作之前,誰知道。我想,在Laravel正在將一個字符串轉換爲一個數組的方法的某個點上,這就是它工作的原因。

您可能需要考慮爲您的控制器編寫一個test。這樣你就不依賴於它如何工作的特定時刻。你知道它按照你想要的方式工作,你沒有做任何改變預期的結果。

+0

好吧,那麼解決了我的問題,但爲什麼在地球上它工作正常(即它是認證,除'索引和show功能之外)?另外,我得到這樣的事實,那就是文檔如何說明它應該是什麼,但是如何將'except'參數轉換成數組解決了這個問題。 – ikartik90

+0

@ ikartik90根據您的評論更新我的答案。 – whoacowboy

相關問題