【问题标题】:Laravel 5 single route multiple controller methodLaravel 5 单路由多控制器方法
【发布时间】:2016-06-17 17:28:48
【问题描述】:

我有一条带参数的路线

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 方法中处理这个问题,并根据参数返回不同的视图。但我想要这样。

【问题讨论】:

标签: php laravel laravel-5 laravel-5.2


【解决方案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 方法,否则添加方法

【讨论】:

  • 只有第一个有用,因为 {ques} 参数也是一个字符串,其中闭包不起作用。但首先,如果我有这两条路线在不同的Route::group()
【解决方案2】:

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

add 放在 show 之前,然后 laravel 将使用第一个匹配作为路由。

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

【讨论】:

  • 如果我有这两条路线在不同的Route::group()
  • @jovanpreet 如果{ques} 只是数字,您可以使用Route::pattern('ques', '[0-9]+'); 来限制{ques} 的类型。
  • 那么也许你应该改变 group 的顺序,或者重命名路线。
【解决方案3】:

我认为您的 {ques} 参数没有正确获取。你可以试试这个:

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

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

public function show($ques){
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-23
    • 2016-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 2015-10-02
    相关资源
    最近更新 更多