我正在使用在PHP 5.2.6中使用Zend Framework 1.5.3在CentOS 5.5上编写的遗留代码
有这样的代码
url:"./sales/getAlerts/?bypass=1"
该视图名为getalerts.phtml
控制器功能名为getAlertsAction
代码在现有服务器上工作正常,但是当我尝试将其移动到新服务器时代码失败,说明......'Action“getalerts”不存在......
如果我更改上面提到的行以使警报中的[A]小写,则代码可以正常工作。
我复制了php.ini,httpd.conf和.htaccess。不确定还有什么可以允许不区分大小写的映射。
什么是允许url-routing不区分大小写?
答案 0 :(得分:3)
您的网址:/ sales / getAlerts /?bypass = 1
实际上扩展为:
问题是你将操作方法命名略有错误,因此如果旧的/本地服务器不区分大小写(大多数PC和Mac不区分大小写)在本地测试时无关紧要。当发布到Web服务器(可能是UNIX)时,它区分大小写,因此它会中断。
您实际想要做的是将所有网址保持为小写,并使用短划线分隔单词。
如果您使用以下网址:/ sales / get-alerts /?bypass = 1
它扩展为:
虽然您可以更改此行为,但最好使用命名约定来坚持使用ZF默认值。
答案 1 :(得分:1)
您应该能够在路线中使用您想要的任何网址...我猜您使用的是默认的/:controller /:action / *路由?如果是这样,请创建自定义的操作以指向您已定义的小写操作。
混淆在于将路由参数映射到实际的控制器/操作/模块。每个'单词'都被分解为控制器动作的camelCase,但在其他任何地方你必须使用连字符来分隔单词。
test = testAction = test.phtml test-something = testSomethingAction = test-something.phtml
您应该可以修改此行为。查看Zend_Controller_Dispatch_Abstract :: formatActionName()。但是,理想情况下,您只想修改路线。
答案 2 :(得分:0)
通常在Zend中,将动作的功能命名为小写(除了动作的'A')是一个好习惯。 (至少,我这样做是为了避免错误)
网址可以是“getAlerts”,Zend将在控制器中搜索“getalertsAction”功能。