2015-08-16 94 views
1
  1. Reports有許多ReportInstances
  2. ReportInstances屬於Reports

我想有網址/reports/:report-id/instances指向動作index_by_report_idReportInstancesController.php如何在CakePHP 3.x中爲子控制器配置路由?

如何相應地配置routes.php

UPDATE:

我想這裏描述的嵌套資源: http://book.cakephp.org/3.0/en/development/routing.html#creating-nested-resource-routes

這裏是我的路線

$routes->resources('Reports', [ 
    'map' => [ 
     'standard' => [ 
      'action' => 'standard', 
      'method' => 'GET', 
     ] 
    ] 
]); 

$routes->resources('Reports', function ($routes) { 
    $routes->resources('ReportInstances'); 
}); 

當我做了/reports/1/instances,它關係到ReportsController尋找行動1.

請廣告鉗住。

+0

'資源()'是REST風格的路線...你實際上是尋找REST風格的路線? – ndm

+0

我想爲RESTful和非RESTful網址嵌套路由。可能?? –

+0

可能是(幾乎)所有東西......但是,究竟如何設想這種工作方式,您需要以RESTful連接哪些URL,哪些不是? – ndm

回答

3

routes.php

$routes->resources('Parents', function ($routes) { 
    $routes->resources('Children'); 
}); 

$routes->resources('Children'); 

ChildrenController.php做到這一點,

protected function _prepareConditions() { 
    $parentId = isset($this->request->params['parent_id']) ? $this->request->params['parent_id'] : null; 

    if ($parentId == null) { 
     return []; 
    } 

    return [ 
     'Children.parent_id' => $parentId 
    ]; 
} 

public function index() 
{ 
    $conditions = $this->_prepareConditions(); 

    $this->paginate = [ 
     'contain' => ['Parents'], 
     'conditions' => $conditions 
    ]; 
    // ... and so on 

你將能夠做到以下幾點:

  1. /父母/ 1 /兒童
  2. /parents/1/children.json
  3. /兒童
  4. /children.json

爲什麼這個工程?

http://book.cakephp.org/3.0/en/development/routing.html#creating-nested-resource-routes

告訴我們,基本上是基本檢索來自請求參數父ID。

什麼也沒有明確說的是,該線路將然後再用基本的5個功能:指數,添加,查看,刪除,父URL下編輯,甚至當你窩他們。

爲什麼你仍然有一個單獨的兒童資源路徑?

這允許/兒童和/children.json如果你需要他們以及工作。

什麼補充的嗎?

我還沒有試過,但我不使用作爲

  1. /父母/ 1 /兒童/加預見到任何問題
  2. /parents/1/children/add.json
  3. /兒童/加
  4. /children/add.json