2015-03-31 107 views
1

我想在CakePHP 3中生成一个路由。我有一个名为ContractsController的控制器,其中我有一个动作 - details($id)CakePHP 3.0 - 将参数传递给映射的RESTful资源

我要地图的details($id)行动:

/api/contracts/details/id.json

我已经尽量得到如下所示(以routes.php):

Router::scope('/api', function ($routes) { 
    $routes->extensions(['json']); 
    $routes->resources('Contracts', [ 
     'map' => [ 
      'details' => [ 
       'action' => 'details', 
       'method' => 'GET' 
      ] 
     ] 
    ]); 
}); 

这让我访问details行动通过/api/contracts/details.json,但我不知道如何通过一个ID与它。

回答

2

最终我能够用下面来解决这个问题:

Router::scope('/api', function ($routes) { 
    $routes->extensions(['json']); 
    $routes->resources('Contracts', [ 
     'map' => [ 
      'details/:id' => [ 
       'action' => 'details', 
       'method' => 'GET' 
      ] 
     ] 
    ]); 
}); 
+0

是的,我可以确认这是在CakePHP 3中工作。另外,如果您将字符串作为参数传递,请使用*通配符而不是':id',以便上面示例中的第五行读取''details/*' '。 – 2017-07-27 00:33:43

0

我会做这样的事情:

Router::scope('/api', function ($routes) { 
    $routes->extensions(['json']); 
    $routes->resources('Contracts', [ 
     'map' => [ 
      'details' => [ 
       'action' => 'details', 
       'id' => '[0-9]+', 
       'method' => 'GET' 
      ] 
     ] 
    ]); 
}); 

如果这不起作用,让我知道,我会运行一个快速测试。

+0

嗨,这之后了抱歉的延迟。这仍然给我同样的错误信息:'错误:无法找到ApiController.',我认为这意味着URL只是不被检测为需要路由的东西。 – Kez 2015-04-01 12:30:34

+0

这确实很奇怪。但是,你可能想看看你的'routes.php'设置。你可能想在这里发布你的整个代码。我认为问题在那里。 – 2015-04-01 14:44:22