2013-02-14 79 views
1

我在我的ZF2應用程序中使用AbstractRestfulController作爲控制器。這個控制器實現了create(),update()等。Zend Framework 2 RestfulController其他操作

是否有可能在這些REST函數旁邊有動作?

E.g.我想要有:url.com/model/id來獲取模型(這已經有效),但我也希望能夠調用url.com/model/doSomething。

我試着用child_routes,但沒有奏效:

'car' => array(
          'type'   => 'literal', 
          'options'  => array(
            'route'  => '/car', 
            'defaults' => array(
              'controller' => 'CarDealer\Controller\Car', 
              'action' => 'index' 
            ), 
          ), 
          'child_routes' => array(
            'rest' => array(
              'type' => 'segment', 
              'options' => array(
                'route'  => '[/:id]', 
                'constraints' => array(
                  'id' => '[0-9]+', 
                ), 
                'defaults' => array(
                  'controller' => 'CarDealer\Controller\Car', 
                ), 
              ), 
            ), 
            'actions' => array(
              'type' => 'segment', 
              'options' => array(
                'route'  => '[/:action]', 
                'constraints' => array(
                  'action' => '[a-zA-Z][a-zA-Z0-9_-]*', 
                  'id'  => '[0-9]+', 
                ), 
                'defaults' => array(
                  'controller' => 'CarDealer\Controller\Car', 
                  'action'  => 'index', 
                ), 
              ), 
            ), 
          ), 
        ), 

我敢肯定上述犯規賺那麼多道理,但我無法找到合適的線索把事情的工作。

感謝您的幫助!

+1

這不符合REST的工作原理......您應該最終將不同的路徑(又名資源URI)映射到不同的操作。你可以做的是使用自定義HTTP方法(動詞),而不是 – Ocramius 2013-02-14 18:32:06

+0

這是我的預期:)謝謝,我將使用不同的控制器。 – dide 2013-02-15 08:20:02

回答

4

AbstractRestfulController不會派發到任意操作方法,因此您應該使用子路由和另一個控制器。

+0

來自傳奇羅布艾倫的答案,謝謝:D – dide 2013-02-20 08:20:21

+0

我不明白你會需要另一個控制器。 Liteal路由映射到Restful控制器中的特定操作。例如,我有一個用例,我需要計算我有多少個** Item **對象。我創建了一個Literal路由映射'/ api/item/count'到'c​​ountAction()',它返回'{count:#}'。這*看起來比使用完全獨立的控制器或使用getList()'並計算出客戶端計數好得多。向這樣的ZF2 Restful控制器添加特定操作是否必然會「錯誤」? – 2013-04-29 13:40:23

+1

這本身並沒有錯。即根據定義,你有一個工作解決方案:)然而,api/item/count是一個與api/item不同的HTTP資源,因此您將/ api/item上可用的一組HTTP操作與GET on/api/action /算入同一個控制器。 – 2013-04-29 16:01:58

0

使用通配符路由來做一些不例外的事情。 在控制器中獲取通配符參數以執行該操作