我正在使用Laravel 5.2构建项目,而在 $scope.btnPost_clicked = function(newNoteText) {
$scope.addNote(newNoteText);
$scope.newNoteText = '';
}
文件中,我有接下来的两条路线:
routes.php
按此顺序,第一条路线Route::get("/products/{id}", [
"as" => "products.show",
"uses" => "ProductsController@show",
]);
Route::get("/products/search", [
"as" => "products.search",
"uses" => "ProductsController@search",
]);
正常工作,正如预期的那样,但第二条路线products.show
没有,它会提供一个空白网页,而不是预期的搜索结果。
我尝试通过更改订单并在products.search
路线前放置products.search
路线来解决问题,当我这样做时,它工作正常并且符合预期。
那么,出了什么问题?为什么会这样呢?
P.S:另一种解决方案是将下一条规则放在products.show
文件的开头:
route.php
当我添加这条规则时,两条路线都可以找到,而且哪条路线首先出现并不重要。但是,如果我没有添加此规则呢?
答案 0 :(得分:4)
路由系统一找到匹配就会停止。所以,让我们说你有这三个:
Route::get("/products/{variableA}" // ...
Route::get("/products/{variableB}" // ...
Route::get("/products/{variableC}" // ...
现在你去/products/someroute
。只有第一个会触发,而后面的两个将永远不会激活。
您的模式约束意味着当您转到/products/search
时,第一个不会触发,因为它正在寻找数字{id}
变量。
没有该约束,{id}
可以是任何东西 - 例如字符串search
。那么,那么第二条路线就不会触发。因此,您需要将它们按相反顺序放置才能正常工作。
您还可以使用路线模型绑定,您可以在此处阅读:https://laravel.com/docs/5.2/routing#route-model-binding