我正在尝试在Codeigniter 4中创建模块来使用HMVC。我试着按照这个用户指南https://codeigniter4.github.io/userguide/general/modules.html,但不能得到它的工作。
我创建了一个'模块'文件夹,旁边的应用程序,公共等。文件夹.
添加到app/config/autoload.php
'Modules' => ROOTPATH.'modules'
在modules文件夹中,我创建了一个'Proef'文件夹,其中包含一个Controllers文件夹和'Proef.php'文件。
该文件包含以下内容:
namespace App\Modules\Proef\Controllers;
class Proef extends \CodeIgniter\Controller
{
public function index() {
echo 'hello!';
}
}
在我添加的app/config.routes.php
文件中
$routes->group('proef', ['namespace' => 'Modules\Proef\Controllers'], function($routes)
{
$routes->get('/', 'Proef::index');
});
然而,以下错误仍然存在:找不到控制器或其方法:\Modules\Proef\Controllers\Proef::index
我错过了什么?
3条答案
按热度按时间ntjbwcob1#
如果你把你的模块文件夹放在“旁边”而不是你的应用文件夹下,那么你的命名空间是错误的。
所以你会得到类似于
注:模块可以是Modules或modules,但自动加载中的相应条目必须匹配。
1.对于模块'Modules' => ROOTPATH。“模块”
1.对于Modules 'Modules' => ROOTPATH。'模块'
看来(从我有限的测试),其他文件夹名称必须是第一个字母大写。这是在Linux上的Apache下。
让我们使用Modules作为文件夹名,这样在Autoload.php中我们就有了...
所以你的Proef Controller -Proef.php...请注意所使用的名称空间。
要通过URL访问它,您可以将路由(Routes.php)设置为...(简易版)
使其可在其他Controller中调用...(为此借用了Home.php)
在您的URL - /proef将导致只是消息/主页将导致类消息和欢迎页面。
希望这能帮你搞清楚。有很多乐趣:)
旁白:
你可以把你的模块文件夹放在任何地方。我把我的放在app/下,这消除了在Autoload.php中添加条目的需要,因为它们属于已经定义的app/。
名称空间和use语句也需要适当地更改。
pftdvrlh2#
编辑Proef类中Modules\Proef\Controllers的命名空间
x8goxv8g3#
我已经创建了一个包来使用CLI自动创建CodeIgniter模块。
你可以从GitHub免费下载。
https://github.com/solomon-ochepa/codeigniter-modules
下面是一些你现在可以运行的命令。
制作/创建
生成一个新模块。
删除
删除模块。
路由
生成新的管线文件。
控制器
生成新的控制器文件。
迁移
生成新的移植文件。
迁移
迁移模块迁移文件。
种子
生成新的模块种子文件。
种子
在模块中运行db:seed命令。
实体
生成一个新的模块实体类。
型号
生成新的模块模型文件。
我希望这会有所帮助。