我正在编写Zend应用程序。
我正在使用zend命令行工具。我创建了几个模块Default
和User
,并将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:文件夹结构:
答案 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);
}