CakePHP 自定义休息路由



我们的路由器在控制器和操作定义之前定义了一个自定义参数:

Router::connect(
    '/:store/:controller/:action/*',
    array(),
    array(
       'store' => 'shop/[^/]+'
    )
);
Router::mapResources('Invoices');
Router::parseExtensions();

它匹配以"/shop/x"为前缀的请求,其中 x 是 id:

http://host.com/shop/1/invoices/view/1  

但是,上述定义无法正确路由 REST 请求:

http://host.com/shop/1/invoices/1.json  (doesn't work)

作为一种解决方法,它通过传递操作来工作(但是对于 REST 来说并不理想):

http://host.com/shop/1/invoices/view/1.json

关于如何使其余路线工作的任何想法?

有一个特殊键可用于连接函数的第三个参数。

pass

用于定义应将哪些路由参数移动到 pass 数组中。添加要传递的参数会将其从常规路由数组中删除。例如 'pass' => array('id')

Router::connect(
    '/:store/:controller/:id',
    array('[method]'=>'GET', 'action'=>'view'),
    array(
       'store' => 'shop/[^/]+',
       'id' => '[0-9]+',
       'pass' => array('id')
    )
);

从 CakePHP 路由文档中找到了解决方案。

相关内容

  • 没有找到相关文章

最新更新