首页 > 解决方案 > Codeigniter 4 - 无法让我的模块工作

问题描述

我试图让一个简单的模块工作。它所做的只是将“测试”回显到网页,但我无法让它工作。

我做的第一件事是将模块添加到 app/Config/Autoload.php 如下;

public $psr4 = [
    APP_NAMESPACE => APPPATH, // For custom app namespace
    'Config'      => APPPATH . 'Config',
    'Modules\Filemanager' => ROOTPATH . 'modules'       
];

然后,我创建了以下目录结构;

在此处输入图像描述

在 Modules/Filemanager/Config/Routes.php 我添加了以下路线;

<?php
$routes->add('/filemanager/(:any)', 'Modules\Filemanager\Controllers\Filemanager::index');

最后,在 Modules/Filemanager/Controllers/Filemanager 我有以下方法:

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

class Filemanager extends \App\Controllers\BaseController
{
    public function index(){
        echo 'test'; die();
    }
}

当我进入浏览器并输入 example.com/filemanager/index 时,出现以下错误;

Controller or its method is not found: \App\Controllers\Filemanager::index

任何想法将不胜感激。

标签: phpcodeignitercodeigniter-4

解决方案


你在这里做错了几件事。

  1. 在 App/Config/Autoload.php 中,你已经写
    'Modules\Filemanager' => ROOTPATH . 'modules'
    了 但是在你的目录结构图中,没有名为“modules”的目录
    请将“Modules”文件夹名称更改为“modules”

  2. 更改
    'Modules\Filemanager' => ROOTPATH 。'modules'

    'Modules' => ROOTPATH 。
    App/Config/Autoload.php 中的“模块”

  3. 在 Modules/Filemanager/Config/Routes.php 您在下面的行中使用 $routes 变量
    $routes->add('/filemanager/(:any)', 'Modules\Filemanager\Controllers\Filemanager::index');
    但是 $routes 没有在文件中的任何地方定义。放

     if(!isset($routes)) {
         $routes = App\Config\Services::routes(true);
     } 
     $routes->get('/filemanager/(:any)', 'Modules\Filemanager\Controllers\Filemanager::index');
    
    

    它应该是 $routes->get() 而不是 $routes->add()

  4. 在您将这些路由添加到 App\Config\Routes.php 文件中之前,模块级路由将不起作用。将您的模块路由添加到 app\Config\Routes.php

  foreach(glob(ROOTPATH . 'modules/*', GLOB_ONLYDIR) as $item_dir) {
    if(file_exists($item_dir . '/Config/Routes.php')) {
       require_once($item_dir . '/Config/Routes.php');
    }
  }

在这些更改之后,您的代码应该可以工作。


推荐阅读