Zend的不区分大小写的URL路由

时间:2010-09-30 15:10:27

标签: php zend-framework url-routing case-insensitive

我正在使用在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不区分大小写?

3 个答案:

答案 0 :(得分:3)

您的网址:/ sales / getAlerts /?bypass = 1

实际上扩展为:

  • Controller:SalesController
  • 动作:getalertsAction
  • 查看:sales / getalerts.phtml

问题是你将操作方法​​命名略有错误,因此如果旧的/本地服务器不区分大小写(大多数PC和Mac不区分大小写)在本地测试时无关紧要。当发布到Web服务器(可能是UNIX)时,它区分大小写,因此它会中断。

您实际想要做的是将所有网址保持为小写,并使用短划线分隔单词。

如果您使用以下网址:/ sales / get-alerts /?bypass = 1

它扩展为:

  • Controller:SalesController
  • 动作:getAlertsAction
  • 查看:sales / get-alerts.phtml

虽然您可以更改此行为,但最好使用命名约定来坚持使用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”功能。