路由冲突 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的主要内容,如果未能解决你的问题,请参考以下文章