2011-04-26 153 views
2

我想爲我的ZF應用程序設置一些路由,但沒有太多。我有一個控制器'WebServiceController',它有一個索引操作和一個lookupTransaction操作。我想使用的路線是這樣的:Zend框架路由

WS/

WS/lookupTransaction

理想情況下,我想用「WS /」前綴什麼去WebServiceController並匹配動作名稱。我不知道該怎麼做,但是我想獲得每條路線的工作,所以我說這兩條路線:

<?php 

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap 
{ 

    function _initRoutes() 
    { 
     $frontController = Zend_Controller_Front::getInstance(); 
     $router = $frontController->getRouter(); 

     $router->addRoute('ws', new Zend_Controller_Router_Route('ws/', array(
      'controller' => 'web-service', 
      'action'  => 'index', 
     ))); 

     $router->addRoute('ws/lookupTransaction', new Zend_Controller_Router_Route('ws/lookupTransaction', array(
      'controller' => 'web-service', 
      'action'  => 'lookup-transaction', 
     ))); 
    } 

} 

第一個工作正常,但第二個沒有,我只是得到'應用程序錯誤'。我究竟做錯了什麼?只是出於興趣,如果我刪除我的兩條路線,並嘗試去:

Web服務/查找事務

我仍然得到同樣的錯誤!

解決

這是我如何使它發揮作用駱駝套管動作名稱和駱駝套管URL。

$router->addRoute('ws', new Zend_Controller_Router_Route('ws/:action', array(
    'controller' => 'web-service', 
    'action'  => 'index', 
))); 
$router->addRoute('ws-lookupTransaction', new Zend_Controller_Router_Route('ws/lookupTransaction', array(
    'controller' => 'web-service', 
    'action'  => 'lookup-transaction', 
))); 

感謝

齊亞德

+0

你的WebServiceController有一個lookupTransactionAction? – wimvds 2011-04-26 12:31:02

+0

順便說一句您可以打開錯誤日誌記錄,並檢查日誌中的具體原因(可能是您已定義動作,但沒有在視圖上定義視圖/禁用渲染,這會引發異常)。 – wimvds 2011-04-26 12:38:23

+0

謝謝wimvds,我確實有這個動作,但是我沒有正確設置環境,所以沒有得到完整的錯誤信息,現在已經修復了。 – Ziad 2011-04-27 11:09:44

回答

0

儘量只此一條路線作爲解決兩個問題:

$router->addRoute('ws', new Zend_Controller_Router_Route('ws/:action', array(
    'controller' => 'web-service', 
    'action'  => 'index', 
))); 

動作參數,然後作爲一個默認的,所以如果不採取行動在URL中指定,將使用索引。否則,它將路由到URL中的操作。因此example.com/ws/lookupTransaction將在您的控制器中轉到lookuptransactionAction()

如果這仍然給你一個錯誤,發佈錯誤消息,以便我們可以看到問題是什麼。

+0

謝謝蒂姆。現在'ws /'解析爲寫入控制器/操作,但'ws/lookup-transaction'和'ws/lookupTransaction'都不起作用。我在控制器中創建了另一個名爲'test'的動作,並且'ws/test'工作正常,所以看起來ZF處理駝峯式動作有一些問題。因此,您的解決方案迎合了我的一般情況,但我需要弄清楚如何正確執行駱駝式的行爲。 – Ziad 2011-04-26 16:41:29

+0

下面是一個快速參考:http://www.papayasoft.com/2010/12/22/zend-framework-routing-hyphen-camelcase/,因此,lookuptransactionAction()應該是正確的方法名稱。無論哪種方式,錯誤消息應該包括它正在尋找什麼方法。 – 2011-04-26 16:56:39

+0

確定首先,我的部分出現了一個愚蠢的錯誤,我有一個名爲lookup_transaction.phtml的視圖,而不是lookup-transaction.phtml,而且我的設置錯誤,所以沒有顯示失敗的原因,所以現在我修復了它工作(順便說一句,我如何配置ZF使用_而不是 - 視圖?)。 – Ziad 2011-04-27 11:04:42

0

路由器實際上會將URL轉換爲小寫。所以正確的URL應該是所有小寫的短劃線分隔的單詞。另外我不確定是否可以在路由名稱中使用斜線(addRoute()的第一個參數)。

+0

感謝那個Tomáš – Ziad 2011-04-26 16:42:33