我的routes.php
Route::get('course/{id}', 'CourseController@show');
Route::get('course/{id}/{comment_type}', 'CourseController@show');
Route::get('course/search/{key_word}', 'CourseController@search');
我的CourseController.php有这些方法
public function show($id,$comment_type=1)
{
//do something
}
public function search($key_word)
{
//do something
}
我想进入search
方法。但每次我调用
course/search/{key_word} //search method in CourseCOntroller
进入
course/{id}/{comment_type} //show method in CourseCOntroller
我调试源代码。我发现UrlMatcher
有一个matchCollection
函数,我找到了原因,laravel生成错误Regular Expression
当我调用course/search/{key_word}
时,它会生成一个这样的正则表达式吗?
#^/course/(?P<id>[^/]++)/(?P<comment_type>[^/]++)$#s
我不知道这些正则表达式是如何产生的。
如何解决问题,我在调用search
时调用course/search/{key_word}
方法。
答案 0 :(得分:2)
改变路线的顺序:
<?php
Route::get('course/search/{key_word}', 'CourseController@search');
Route::get('course/{id}/{comment_type}', 'CourseController@show');
Route::get('course/{id}', 'CourseController@show');
因为{id}是通配符,所以它会接收每条路径。
请参阅http://laravel.com/docs/routing#route-parameters - &gt; '正则表达式路径约束' 或路线模型绑定@ http://laravel.com/docs/routing#route-model-binding