Laravel 5单路多控制器方法

时间:2016-03-28 09:38:08

标签: php laravel laravel-5 laravel-5.2

我有一个带参数

的路线
Route::get('forum/{ques}', "ForumQuestionsController@show");

现在我想要一条类似

的路线
Route::get('forum/add', ['middleware' => 'auth:student', 'uses' => "ForumQuestionsController@add"]);

当我点击localhost:800/forum/add时,我会被路由到ForumQuestionsController@show而不是ForumQuestionsController@add

我知道我可以在ForumQuestionsController的show方法中处理此问题,并根据参数返回不同的视图。但我想以这种方式。

3 个答案:

答案 0 :(得分:1)

您可以调整路线的顺序来解决问题。

final List<Device> devicesList = jsonFileHandlerDevice.getList(); ConcurrentMap<Integer, Device> map = devicesList.stream() .collect(Collectors.toMap(item -> item.id, item -> item)); 放在public class Device { public MobileOs mobileOs; public Integer id; public Device() { } public Device(MobileOs mobileOs, double osVersion, int allocatedPort, Integer id, String uuid) { this.mobileOs = mobileOs; this.id = id; } } 之前,然后laravel将使用第一个匹配作为路线。

add

答案 1 :(得分:1)

首先给出这个

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

然后是以下

Route::get('forum/{ques}', "ForumQuestionsController@show");

另一种方法(使用正则表达式约束)

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

如果ques是一个数字,它将自动转到show方法,否则添加方法

答案 2 :(得分:0)

我认为您的{ques}参数无法正常使用。你可以试试这个:

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

如果您在show方法中使用任何参数添加参数:

public function show($ques){
}