CakePHP中的自定义路由:regex不限制匹配

CakePHP中的自定义路由:regex不限制匹配,php,regex,cakephp,routes,custom-routes,Php,Regex,Cakephp,Routes,Custom Routes,我试图在cakephp中配置自定义路由,以便url /objects/id/action=>ObjectsController.action(),参数['id']=id (这样我就不需要像/objects/action/id这样的URL,它们在逻辑上对我来说没有objects/id/action那么有意义) 我仍然希望/objects/action触发ObjectsController.action()(例如用于添加、索引、搜索) 我的路由配置如下所示: Router::connect('/:c

我试图在cakephp中配置自定义路由,以便url

/objects/id/action=>ObjectsController.action(),参数['id']=id

(这样我就不需要像/objects/action/id这样的URL,它们在逻辑上对我来说没有objects/id/action那么有意义)

我仍然希望/objects/action触发ObjectsController.action()(例如用于添加、索引、搜索)

我的路由配置如下所示:

Router::connect('/:controller/:id',
    array('action'=>'view'),
    array(
        ':id'       =>  '^[0-9]+$'
    )
);
Router::connect('/:controller/:id/:action/*',
    array('action'=>'view'),
    array(
        ':id'       =>  '^[0-9]+$',
        ':action'   =>  '[A-Za-z0-9_\-]*'
    )
);
这适用于(例如):

  • /对象/54
  • /对象/54/编辑
  • /对象/添加
但不是用

  • /对象/索引/页面:2
为此,它给了我一个错误,我需要在ObjectsController中定义操作“page:2”。。。它肯定会工作,因为:id应该只匹配数字,否?

尝试从第二个参数中删除“:”:

'id'       =>  '^[0-9]+$'
另请参见“通过”选项

@参见谷歌的“cakephp路线”:


这很有趣。事实上,我是在意识到自己是多么愚蠢之后才来到这里的(当时我正在添加一条新路线,但它突然变了)。非常感谢。