路由冲突Laravel

时间:2016-11-30 19:54:44

标签: php laravel model-view-controller routing

我设置了两个路由,其中​​一个接受参数,另一个路径只是一个URL,它应该路由到可以创建新用户的表单。但是,当我导航到/ users / create时,似乎我的getUser函数正在接收get请求并将我发送到我的user.blade.php而不是我的createUser.blade.php。

Route::get('/users/{id}', "UserController@getUser");
Route::get('/users/create', "UserController@createUser");

我在UserController中的方法是:

  public function createUser(){
    //TODO: Handle user creation.
    return view('createUser');
  }

  public function getUser($id){
    $user = User::find($id);

    return view('userdetails', compact('user'));

  }

2 个答案:

答案 0 :(得分:3)

更改它们的顺序

Route::get('/users/create', "UserController@createUser");
Route::get('/users/{id}', "UserController@getUser");

Laravel将尝试自上而下匹配路线,因此您需要在类似匹配路线下变量的路线。

答案 1 :(得分:2)

处理此问题的更好,更安全的方法是

Route::get('/users/{id}', 'UserController@getUser')->where(['id' => '[0-9]+']);
Route::get('/users/create', 'UserController@createUser');

where()尝试将id字段与特定的正则表达式/正则表达式匹配。在这种情况下,[0-9]表示 0-9 +之间的任何整数表示多次:)