路由冲突 Laravel

Posted

技术标签:

【中文标题】路由冲突 Laravel【英文标题】:Routing conflict Laravel 【发布时间】:2017-04-15 06:53:35 【问题描述】:

我设置了两个路由,一个接受参数,另一个只是一个 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'));

  

【问题讨论】:

【参考方案1】:

改变它们的顺序

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

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

【讨论】:

【参考方案2】:

处理这个问题的更好和更安全的方法是

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

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

【讨论】:

漂亮,效果很好。只需更改正则表达式以匹配任何正整数。谢谢。

以上是关于路由冲突 Laravel的主要内容,如果未能解决你的问题,请参考以下文章

路由冲突 Laravel

如何避免路由冲突?

反应路由和django url冲突

laravel中的路由冲突

多个 Slugs 冲突管理路由

Vue.js 前端路由与后端烧瓶路由冲突