2016-03-28 142 views
4

我有參數的路線Laravel 5單路多控制器方法

Route::get('forum/{ques}', "[email protected]"); 

現在我想的路線類似

Route::get('forum/add', ['middleware' => 'auth:student', 'uses' => "[email protected]"]); 

好時,我打localhost:800/forum/add我被路由到[email protected],而不是[email protected]

那麼我知道我可以在ForumQuestionsController的顯示方法中處理這個問題,並返回基於第mter。但我希望這樣。

+0

好的問題.....喜歡它! –

+1

看看這個http://stackoverflow.com/questions/36203020/laravel-single-route-point-to-different-controller-depending-on-slugs?noredirect=1#comment60056797_36203020 –

回答

1

首先給這一個

Route::get('forum/add', ['middleware' => 'auth:student', 'uses' => "[email protected]"]); 

那麼下面

Route::get('forum/{ques}', "[email protected]"); 

另一種方法(使用正則表達式約束)

Route::pattern('ques', '[0-9]+'); 
Route::get('forum/{ques}', "[email protected]"); 

如果疑問句是一個數字,你會自動去顯示方法,否則添加方法

+0

只有第一個是有用的,因爲{ques}參數也是一個字符串,其中閉包不起作用。但是,如果我在不同的'Route :: group()'中有這兩條路線的話,那麼也會如此 – jovanpreet

1

您可以調整路線的順序來解決問題。

add放在show之前,然後laravel會使用第一個匹配作爲路由。

Route::get('forum/add', ['middleware' => 'auth:student', 'uses' => "[email protected]"]); 
Route::get('forum/{ques}', "[email protected]"); 
+0

如果我有這兩條路線不同的'Route :: group()' – jovanpreet

+0

@jovanpreet如果'''ques}'''只是數字,你可以使用'''Route :: pattern('ques','[0-9] +' );'''限制'''{ques}'''的類型。 – KIDJourney

+0

不是它的數字 – jovanpreet

0

我認爲你的{ques}參數沒有得到正確。你可以試試這個:

Route::get('forum/show/{ques}', "[email protected]"); 
Route::get('forum/add', ['middleware' => 'auth:student', 'uses' => "[email protected]"]); 

如果您使用的顯示方法添加任何參數參數:

public function show($ques){ 
}