Codeigniter 4:创建模块

2wnc66cl  于 2023-09-28  发布在  其他
关注(0)|答案(3)|浏览(106)

我正在尝试在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
我错过了什么?

ntjbwcob

ntjbwcob1#

如果你把你的模块文件夹放在“旁边”而不是你的应用文件夹下,那么你的命名空间是错误的。
所以你会得到类似于

app/
Modules/   ==> can be modules or Modules but must be set in autoload with the same case
    Proef/
       Controllers/
           Proef.php

注:模块可以是Modules或modules,但自动加载中的相应条目必须匹配。
1.对于模块'Modules' => ROOTPATH。“模块”
1.对于Modules 'Modules' => ROOTPATH。'模块'
看来(从我有限的测试),其他文件夹名称必须是第一个字母大写。这是在Linux上的Apache下。
让我们使用Modules作为文件夹名,这样在Autoload.php中我们就有了...

$psr4 = [
    'App'         => APPPATH,                // To ensure filters, etc still found,
    APP_NAMESPACE => APPPATH,                // For custom namespace
    'Config'      => APPPATH . 'Config',
    'Modules'     => ROOTPATH . 'Modules'
];

所以你的Proef Controller -Proef.php...请注意所使用的名称空间。

<?php
namespace Modules\Proef\Controllers;
use App\Controllers\BaseController;

class Proef extends BaseController {
    public function index() {
        echo 'Hello - I am the <strong>'. __CLASS__ . '</strong> Class';
    }
}

要通过URL访问它,您可以将路由(Routes.php)设置为...(简易版)

$routes->get('/proef', '\Modules\Proef\Controllers\Proef::index');

使其可在其他Controller中调用...(为此借用了Home.php

<?php namespace App\Controllers;

use \Modules\Proef\Controllers\Proef;

class Home extends BaseController
{
    public function index()
    {
        $mProef = new Proef();
        $mProef->index();

        return view('welcome_message');
    }

    //--------------------------------------------------------------------

}

在您的URL - /proef将导致只是消息/主页将导致类消息和欢迎页面。
希望这能帮你搞清楚。有很多乐趣:)

旁白:

你可以把你的模块文件夹放在任何地方。我把我的放在app/下,这消除了在Autoload.php中添加条目的需要,因为它们属于已经定义的app/。
名称空间和use语句也需要适当地更改。

pftdvrlh

pftdvrlh2#

编辑Proef类中Modules\Proef\Controllers的命名空间

x8goxv8g

x8goxv8g3#

我已经创建了一个包来使用CLI自动创建CodeIgniter模块。
你可以从GitHub免费下载。
https://github.com/solomon-ochepa/codeigniter-modules
下面是一些你现在可以运行的命令。

制作/创建

生成一个新模块。

php spark module:make Example

删除

删除模块。

php spark module:delete Example

路由

生成新的管线文件。

php spark module:route Example

控制器

生成新的控制器文件。

php spark module:controller ExampleController Example

迁移

生成新的移植文件。

php spark module:migration CreateExamplesTable Example

迁移

迁移模块迁移文件。

php spark module:migrate Example

种子

生成新的模块种子文件。

php spark module:seeder Example Example

php spark module:seeder ExampleSeeder Example

种子

在模块中运行db:seed命令。

php spark module:seed Example

php spark module:seed Example ExampleSeeder

实体

生成一个新的模块实体类。

php spark module:entity Example Example

型号

生成新的模块模型文件。

php spark module:model ExampleModel Example

我希望这会有所帮助。

相关问题