Zend Url和模块名称区分大小写

时间:2012-02-29 07:27:22

标签: zend-framework routing

我正在编写Zend应用程序。

我正在使用zend命令行工具。我创建了几个模块DefaultUser,并将Default标记为应用程序配置文件中的默认控制器。我也为这两个模块创建了各自的索引控制器/操作。

当我浏览网站根目录时,一切都很好。但是当我浏览$site_root$/user时,我得到错误而不是索引控制器。

Notice: Undefined index: user in E:\xampp\php\PEAR\Zend\Controller\Dispatcher\Standard.php on line 384

Message: Invalid controller specified (index)
Stack trace:

#0 E:\xampp\php\PEAR\Zend\Controller\Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
#1 E:\xampp\php\PEAR\Zend\Application\Bootstrap\Bootstrap.php(97): Zend_Controller_Front->dispatch()
#2 E:\xampp\php\PEAR\Zend\Application.php(366): Zend_Application_Bootstrap_Bootstrap->run()
#3 E:\xampp\htdocs\$project$\public\index.php(26): Zend_Application->run()
#4 {main}  

Request Parameters:

array (
  'module' => 'user',
  'controller' => 'index',
  'action' => 'index',
)  

然而,当我浏览$site_root$/User时,一切都还可以。显然,URL必须区分大小写才能反映模块名称。我想到了一些方法,就像重写Zend Request类一样。但是,在URL工作中获取小写模块名称的最佳做法是什么?

编辑1:文件夹结构:

enter image description here

3 个答案:

答案 0 :(得分:2)

也许问题是你设置默认模块"Default"而不是"default"? 你的文件夹名称也应该是小写但我从来没有使用过命令行,所以也许我错了。 将所有模块文件夹重命名为小写。

答案 1 :(得分:1)

根据操作系统和服务器可能有一些案例要求。

例如Windows vs linux Paths。在Linux磁盘上路径区分大小写,而像Apahe路径结构的服务器基于磁盘路径。从磁盘执行基本I / O操作所涉及的任何操作都要求对“文件”名称进行严格操作。

对于URLS,这取决于服务器实现和可能的插件。例如,Apache Http通常区分大小写,但您可以启用mod_spelling(http://httpd.apache.org/docs/2.2/mod/mod_speling.html)以在URL中进行正确的拼写,例如作品。

在文件/ class / method / ...名称中严格要求始终是一个好习惯。还建议使用模式(拥有或不使用)以提高代码和结构的效率。

答案 2 :(得分:0)

检查文件Zend \ Controller \ Request \ Abstract.php中的Zend类Zend_Controller_Request_Abstract。如果您在ZF应用中有多个模块,则必须添加ucfirst()

public function getModuleName()
{
    if (null === $this->_module) {
        $this->_module = $this->getParam($this->getModuleKey());
    }

    return ucfirst($this->_module);
}