【问题标题】:Codeigniter 4 - Cannot get my module to workCodeigniter 4 - 无法让我的模块工作
【发布时间】:2021-04-29 08:34:12
【问题描述】:

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

我做的第一件事是将模块添加到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

任何想法都将不胜感激。

【问题讨论】:

    标签: php codeigniter codeigniter-4


    【解决方案1】:

    你在这里做错了几件事。

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

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

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

    3. 在 Modules/Filemanager/Config/Routes.php 您在下面的行中使用了 $routes 变量
      $routes-&gt;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');
        }
      }
    

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

    【讨论】:

    • 非常感谢您的详细解释。我在上面实现了,但我仍然得到同样的错误。我什至具体的方法是; example.com/filemanager/index
    • 我再次检查了我的所有代码,并相信它与所述完全匹配。只是似乎无法到达控制器
    • 你能显示即将出现的错误吗?
    • 同样的错误。找不到控制器或其方法。
    • 我也跟着这个,我得到了和上面一样的错误。 youtube.com/watch?v=jUtQ5-6l4is
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-17
    • 1970-01-01
    • 2018-03-09
    • 2020-08-15
    • 2023-04-09
    • 1970-01-01
    • 2018-08-03
    相关资源
    最近更新 更多