2016-11-30 148 views
1

我有两条路由建立,其中一个需要一个参数,另一个只是一个URL,应该路由到可以创建一个新用户的窗体。然而,当我导航到/用户/创建它看起来像我的getUser函数接收获取请求并发送给我的user.blade.php而不是我的createUser.blade.php。路由冲突Laravel

Route::get('/users/{id}', "[email protected]"); 
Route::get('/users/create', "[email protected]"); 

我在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

处理这更好的和更安全的做法是

Route::get('/users/{id}', '[email protected]')->where(['id' => '[0-9]+']); 
Route::get('/users/create', '[email protected]'); 

where()试图将id领域与特定正则表达式/正则表达式匹配。在这种情况下[0-9]意味着0-9+之间的任意整数表示多次 :)

+0

美丽,这工作完美。只是改变了正则表达式来匹配任何正整数。谢谢。 –

3

改变它们的顺序

Route::get('/users/create', "[email protected]"); 
Route::get('/users/{id}', "[email protected]"); 

Laravel将尝试匹配路径自上而下的,所以你想要的是可变的那些在相似的匹配之下。

+0

这也适用。感谢您的建议。 –