Thinkphp 路由匹配问题

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 为什么匹配到第一个发布路由里面去了呢?

阅读 4.6k
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的路由是从上往下逐个匹配,路由的第四个参数,就可以用来匹配正则表达式。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题