Thinkphp 路由匹配问题

ArH
  • 25
Route::post('xdk/plan','xdk/plan/save');
Route::post('xdk/plan/:id/fav','xdk/plan/fav');
Route::post('xdk/plan/:id/comments','xdk/plan/comments'); //推荐

就是想构建一个restful风格的api
/xdk/plan 发布
/xdk/plan/:id/fav 点赞
/xdk/plan/:id/comments 评论

/xdl/plan/2/fav 为什么匹配到第一个发布路由里面去了呢?

回复
阅读 3.5k
3 个回答
Route::post('xdk/plan$','xdk/plan/save');
Route::post('xdk/plan/:id/fav$','xdk/plan/fav');
Route::post('xdk/plan/:id/comments$','xdk/plan/comments'); //推荐

首先你可以在每个路由结尾加个 $ 进行完全匹配,避免你这种情况的发生,
其次,tp5自带支持RESTFul的路由功能,只需要

Route::resource('xdk/plan','xdk/plan');

就可以实现资源路由,具体内容见官方文档:tp资源路由

配置文件中有一个完全匹配

 // 路由是否完全匹配
    'route_complete_match'   => true,

Thinkphp5的路由是从上往下逐个匹配,路由的第四个参数,就可以用来匹配正则表达式。

宣传栏