2010-09-30 78 views
2

我與CentOS上用PHP編寫的5.2.6與Zend框架1.5.3遺留代碼工作5.5不區分大小寫的URL路由的Zend公司

有代碼,這樣

url:"./sales/getAlerts/?bypass=1" 

的觀點是命名getalerts.phtml

控制器功能被命名爲getAlertsAction

代碼工作在現有服務器上很好,但是當我試圖將它移動到新的服務器,代碼失敗,說明......「A ction「getalerts」不存在...

如果我更改上面提到的幾行,使警報中的[A]小寫代碼有效。

我已經複製了php.ini,httpd.conf和.htaccess。不知道還有什麼可能允許不區分大小寫的映射發生。

它是什麼讓網址路由不區分大小寫?

+0

我也很想知道這個答案。但是,我總是隻保留小寫字母的全名以避免這個問題 – Ascherer 2010-09-30 15:21:47

回答

1

你應該可以在你的路由中使用任何你想要的URL ......我猜你正在使用默認的/:controller /:action/*路由?如果是這樣,請創建自定義指向您所定義的小寫操作。

混淆在於將您的路線參數映射到您的實際控制器/動作/模塊。每個'單詞'被分解爲控制器動作的camelCase,但是在其他任何地方你都必須使用連字符來分隔單詞。

測試= testAction = test.phtml 測試的東西= testSomethingAction =測試something.phtml

你應該能夠修改此行爲。查看Zend_Controller_Dispatch_Abstract :: formatActionName()。但是,理想情況下,您只需要修改路線。

+0

謝謝!我發現文檔介紹Zend 1.0和1.5之間的某些行爲變得區分大小寫。開始將它們全部轉換爲小寫。 – Bleeped 2010-10-01 21:01:08

0

通常在Zend中,以小寫字母命名動作函數是個好習慣(除了Action的「A」)。 (至少,這是我做的,以避免錯誤)

URL可以與「getAlerts」,Zend將搜索控制器中的「getalertsAction」功能。

3

您的網址:/銷售/ getAlerts /旁路= 1

實際上擴展到:

  • 控制器:SalesController
  • 操作:getalertsAction
  • 查看:銷售/ getalerts.phtml

問題是你命名你的操作方法有點不對,所以如果舊的/本地服務器isn不區分大小寫(大多數PC和Mac不區分大小寫)在本地測試時無關緊要。當發佈到Web服務器(可能是UNIX)時,它是區分大小寫的,因此會中斷。

你真正想要做的是保持所有的URL小寫和單獨的單詞用破折號。

如果您使用URL:/ sales/get-alerts /?旁路= 1

它擴展爲:

  • 控制器:SalesController
  • 操作:getAlertsAction
  • 查看:銷售/ GET-alerts.phtml

雖然你可以改變這種行爲您最好使用命名約定來堅持ZF默認值。