使用 HMVC 扩展的 CodeIgniter 有一个奇怪的错误。在 localhost 上它运行良好,在 Linux 服务器上我得到这个错误Unable to load your default controller. Please make sure the controller specified in your Routes.php file is valid.
,即使一切都配置得很好。我做了一些核心 CodeIgniter 调试,发现 fetch_directory() 基本方法正在返回
../modules/{controller}/{action} instead of modules/{controller}/{action}
其他人有这个问题吗?解决此问题的解决方案是什么?
4 回答
我也遇到了同样的问题,也使用了 HMVC 架构。这是我为他人谋福利的解决方案。
就我而言,事实证明我已经删除了/application/controllers/目录。因为这个目录总是空的,被各个模块中的控制器取代,我(错误地)认为“整理一下”就可以了。
实际上,MX 路由在它为路由器创建的路径中引用它以查找模块;
APPPATH.'controllers/'.$RTR->fetch_directory().$RTR->fetch_class().'.php'
所以 ../ 部分是正确的。我怀疑您的本地环境是 Windows(就像我的一样),它设法以某种方式绕过这条破碎的路径,这是 Linux 无法做到的。
所以这个场景的简单修复是......把/application/controllers/目录放回去。
这可能是几件事:
) 检查您的配置文件并查看 config['base_url'] 设置为什么,这可能是您的开发环境(例如“localhost”)和生产环境(例如“http://www.example.com”之间的不匹配")
) 仔细检查您的 routes.php 文件并确保将默认页面控制器设置为控制器。然后三重检查以确保拼写匹配!
我有同样的问题和改变和分别$this->class
在和功能类似,$this->method
$class
$method
set_class
set_method
My_Router class
public function set_class($class) {
$this->class = str_replace('-', '_',$class).$this->config->item('controller_suffix');
//---^ remove $this from here
}
public function set_method($method) {
$this->method = str_replace('-', '_',$method);
//---^ remove $this from here
}
我也用charliefortune的回答解决了。谢谢。请注意,如果您从 .rar 重新创建或上传到某些服务器,可能会删除空文件夹。因此,您可能应该将一些文件添加到“控制器”文件夹中。