CakePHP 3:如何为单个资源配置多参数路由
解决多参数路由配置问题
首先得说,你用resources路由的思路其实不太适配你的需求——因为resources是为标准RESTful资源设计的,默认的路由规则和你要的四个动态参数的URL不匹配,这也是你报错的核心原因。
错误原因分析
你原来的配置里,把:id直接作为map的键是不合法的,框架没法正确解析这个路由规则。而且默认的DataController::index方法是不带参数的,当请求带着四个id参数进来时,框架找不到对应签名的方法,就会抛出Missing Method错误。
推荐解决方案:直接定义GET路由
既然你的需求很明确(四个动态参数的GET请求到index方法),没必要硬套resources,直接写个简单的GET路由更清晰:
// 在ApiV2插件的路由文件中 $routes->get('data/{id1}/{id2}/{id3}/{id4}', 'DataController::index');
然后在你的DataController里,确保index方法接收这四个参数:
public function index($id1, $id2, $id3, $id4) { // 这里处理你的业务逻辑 }
这样配置后,访问/api/v2/data/xxx/xxx/xxx/xxx就会正确路由到DataController的index方法,完全符合你的URL格式要求,也不用加那些多余的term1前缀。
如果你一定要用resources配置(不推荐)
要是你坚持想用resources,得先禁用默认的RESTful路由,再自定义映射规则,但这样生成的URL会多一个index前缀(比如/api/v2/data/index/xxx/xxx/xxx/xxx),不符合你的预期,所以还是上面的方案更合适。
内容的提问来源于stack exchange,提问作者Tarun
相关产品推荐
相关产品推荐

