2010-09-30 114 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默认值。