最近,我尝试将 HMVC 与 i18n 一起使用,并且遇到了类似的问题。下面是我的解决方案。
1.首先你需要到这里HMVC选择“Branches”来下载HMVC扩展,不要在github上下载它可能不起作用。
2.解压缩文件夹内的HMVC扩展,将两个文件“MY_Loader.php”和“MY_Router.php”从核心文件夹复制到Codeigniter的“application/core”,然后将“MX”文件夹从“third_party”复制到Codeigniter的“application/third_party” . 至此,您的 HMVC 已安装,但它无法工作,因为 i18n 会导致问题,因此如果您运行您的网站,它可能不会显示。
3.你需要得到新版本的i18n,它同时支持HMVC和不支持HMVC,旧版本的i18n似乎不支持HMVC。到这里i18n下载它并花时间阅读 github 上的描述。
4.在此步骤之前,我建议您备份“application/core/MY_Config.php”和“application/core/MY_Lang.php”,以防出现问题,您可以恢复。解压 i18n 里面的文件夹,将 config 文件夹中的“language.php”文件复制到 Codeigniter 的“application/config”,将 core 文件夹中的“MY_Config.php”和“MY_Lang.php”两个文件复制到 Codeigniter 的“application/core”,最后复制“ MY_language_helper.php”从 helpers 文件夹到 Codeigniter 的“application/helpers”。到目前为止,您已经安装了新的 i18n,但您需要对其进行配置以使其工作,否则您可能会收到错误消息。
5.打开“application/core/MY_Config.php”并将行替换require_once APPPATH . "libraries/MX/Config.php";
为require_once APPPATH . "third_party/MX/Config.php";
然后打开“application/core/MY_Lang.php”将行替换require APPPATH . "libraries/MX/Lang.php";
为require APPPATH . "third_party/MX/Lang.php";
。为什么?因为它指向错误的目录,MX 文件夹位于“third_party”而不是“libraries”,以防万一您不知道,如果您不更改它,您可能会收到错误消息。
6.要添加新语言(不是创建语言文件),您需要打开“application/config/language.php”。您在顶部看到带有注释的代码块“支持的语言”已经有英语和俄语配置,您只需复制模板并更改为您想要的语言,这非常容易。请注意文件夹的名称必须与“应用程序/语言”中的文件夹完全相同。
7.根据i18n github描述你需要添加这些行
$route['^(en|de|fr|nl)/(.+)$'] = "$2";
$route['^(en|de|fr|nl)$'] = $route['default_controller'];
到“application/config/routes.php”。请注意$route['^(en|de|fr|nl)/(.+)$'] = "$2";
,旧 i18n 中的这一行可能$route['^(en|de|fr|nl)/(.+)$'] = "$1";
不同之处在于“$1”必须更改为“$2”,否则您会遇到问题。
8.创建语言文件的方法和你在旧i18n中的方法一样。现在使用多语言测试您的网站,以确保一切正常。
9.创建你的模块。如何?在 Codeigniter 的应用程序文件夹中创建一个名为“modules”的文件夹,在 modules 文件夹中,您可以开始创建模块。也就是说你想创建一个模块调用 foo,你只需要创建一个文件夹命名为“foo”,然后在 foo 文件夹中你可以创建三个文件夹控制器、模型和视图。使用下面的代码创建一个名为 foo 的 php 文件
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Foo extends MX_Controller
{
public function index()
{
echo "<h1>class foo this is module test</h1>";
}
}
输入 url 来运行你的模块,如果你看到“class foo this is module test”那么它就可以工作了。记住模块类必须从 MX_Controller 扩展。
如果您仍然遇到任何问题,请询问。