我遇到了多个溃败问题,其中一些失败了。
/**
*
* @url GET /fetch
* @url GET /fetch/lazyload/:lazy
* @url GET /fetch/:id/
* @url GET /fetch/:id/lazyload/:lazy
* @url GET /fetch/start/:offset/limit/:limit
* @url GET /fetch/start/:offset/limit/:limit/lazyload/:lazy
* @url GET /fetch/start/:offset/limit/:limit/sort/:sort
* @url GET /fetch/start/:offset/limit/:limit/sort/:sort/lazyload/:lazy
* @url GET /fetch/start/:offset/limit/:limit/sort/:sort/orderby/:order
* @url GET /fetch/start/:offset/limit/:limit/sort/:sort/orderby/:order/lazyload/:lazy
*/
protected function fetch($id = null, $offset = 0, $limit = 25, $lazy = false, $sort = 'asc', $order = null){
//override
throw new RestException(501);
}
对于instace
@url GET /fetch/start/:offset/limit/:limit
如果网址为/fetch/start/1/limit/2
,将无效
但如果/fetch/start/1/2
和
/fetch/:id/
将覆盖/fetch/lazyload/:lazy
因此/fetch/lazyload/true
无效,所识别的模式将返回/fetch:id => lazyload
我错过了什么,或者这种映射是不可能的?
谢谢。
答案 0 :(得分:1)
歧义在这里发挥作用!阅读this thread了解更多
简而言之,网址中的参数是贪婪的,所以我们需要确保它们来自非贪婪的网址
例如,让我们谈谈两个网址
simple\:param
simple\name
如果我们按照与上面相同的顺序保留网址并调用simple\name
,则只有映射到simple\:param
的api方法才会收到设置参数作为“名称”。我们可以通过简单地将订单更改为
simple\name
simple\:param
同样,您可以使用以下
修复您的API/**
*
* @url GET /fetch/start/:offset/limit/:limit/sort/:sort/orderby/:order/lazyload/:lazy
* @url GET /fetch/start/:offset/limit/:limit/sort/:sort/orderby/:order
* @url GET /fetch/start/:offset/limit/:limit/sort/:sort/lazyload/:lazy
* @url GET /fetch/start/:offset/limit/:limit/sort/:sort
* @url GET /fetch/start/:offset/limit/:limit/lazyload/:lazy
* @url GET /fetch/start/:offset/limit/:limit
* @url GET /fetch/lazyload/:lazy
* @url GET /fetch/:id/lazyload/:lazy
* @url GET /fetch/:id/
* @url GET /fetch
*/
protected function fetch($id = null, $offset = 0, $limit = 25, $lazy = false, $sort = 'asc', $order = null)
{
//override
throw new RestException(501);
}
HTH