rahpt/ci4modules 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

rahpt/ci4modules

最新稳定版本:v1.0.1

Composer 安装命令:

composer require rahpt/ci4modules

包简介

Easy Modules in Codeigniter 4

README 文档

README

Torne qualquer projeto CodeIgniter 4 verdadeiramente modular – sem precisar editar app/Config/Autoload.php a cada novo módulo.

🐞 Problema – por que o autoloader “nativo” não basta

O CodeIgniter 4 segue estritamente a especificação PSR‑4, na qual cada raiz de namespace precisa apontar para um diretório físico.
Isso traz duas limitações práticas quando tentamos organizar a aplicação em múltiplos módulos:

  1. Cadastro manual de cada módulo
    Para que o autoloader reconheça um novo módulo é preciso abrir app/Config/Autoload.php e acrescentar mais uma linha à matriz $psr4, por exemplo:

    'App\Blog'  => ROOTPATH . 'Modules/Blog',
    'App\Admin' => ROOTPATH . 'Modules/Admin',
    // … +1 linha por módulo

    Em projetos com dezenas de módulos isso vira um festival de entradas repetitivas – e cada merge ou deploy fica sujeito a conflitos ou esquecimentos.

  2. Subpastas NÃO são reconhecidas automaticamente
    Uma tentativa ingênua de “mapear tudo de uma vez” como:

    'App\Modules' => ROOTPATH . 'Modules',

    não funciona: o autoloader passa a considerar Modules o namespace raiz e para de descer para Modules/Blog, Modules/Admin, etc.
    O resultado é que classes, helpers e até Config/Routes.php não são encontrados, gerando erros 404 ou Class not found.

Resumo: cada novo módulo exige intervenção manual em arquivo de configuração e qualquer esquecimento quebra a aplicação. Escalar (ou simplesmente clonar) um projeto modular torna‑se trabalhoso e propenso a erros.

🚀 Solução

Este pacote Composer, faz alterações simples que altera o autoloader de modo a fazer uma varredura recursiva em qualquer pasta de módulos que você definir (por padrão: APPPATH/Modules). Cada subpasta de primeiro nível vira um módulo autônomo com sua estrutura própria Controllers/, Models/, Views/, Config/Routes.php etc. – sem necessidade de alterar manualmente o Config/Autoload.php.

my‑project/
├── app/
│   └── …
└── Modules/            ← pasta monitorada
    ├── Blog/           ← módulo 1
    │   ├── Controllers/
    │   ├── Models/
    │   ├── Views/
    │   └── Config/Routes.php
    └── Admin/          ← módulo 2
        └── …

📦 Instalação

composer require rahpt/ci4modules

Requisito: CodeIgniter 4.3 ou superior.

⚙️ Configuração

1. Habilitar o Service Provider

Após a instalação, execute o comando abaixo para atualizar o arquivo app/Config/Modules.php e escolher a pasta onde seus módulos residirão:

2. (Opcional) Alterar o caminho dos módulos

Padrão:

APPPATH . 'Modules'   // ou seja, app/Modules

Para usar outro local (ex.: ROOTPATH . 'modules'), crie ou altere o arquivo app/Config/ModulesTemplate.php:

<?php

namespace Config;

use Vendor\ModularAutoloader\Config\BaseModules; // ajuste o namespace real

class Modules extends BaseModules
{
    /**
     * Caminho absoluto onde os módulos residem.
     */
    public string $modulesPath = ROOTPATH . 'modules';  // altere nesta linha
}

✨ Como funciona

  1. Boot – um service provider é registrado pelo Composer.

  2. Scan – durante o startup, ele percorre modulesPath (nível 1).

  3. Register – para cada subpasta encontrada, gera dinamicamente uma entrada PSR‑4 no autoloader interno do CI4:

    <AppNamespace>\<ModuleName>\  => <modulesPath>/<ModuleName>/
    
  4. Profit! Controllers, Models, Configs, Helpers etc. do módulo ficam prontos para uso.

🖥️ Exemplo de rotas em um módulo

Modules/Blog/Config/Routes.php

<?php

/** @var \CodeIgniter\Router\RouteCollection $routes */
$routes->group('blog', ['namespace' => 'App\Modules\Blog\Controllers'], static function ($routes) {
    $routes->get('/', 'PostController::index');
    $routes->get('(:segment)', 'PostController::show/$1');
});

Esse arquivo será carregado após o global app/Config/Routes.php.

🤝 Contribuindo

  1. Fork → crie sua branch (git checkout -b feature/minha‑feature)
  2. Commit suas alterações (git commit -m 'feat: nova feature')
  3. Push (git push origin feature/minha‑feature) e abra um Pull Request.

🪪 Licença

Distribuído sob a licença MIT. Consulte LICENSE para detalhes.

📬 Dúvidas?

Abra uma Issue ou escreva para ci4modules@rah.pt.

统计信息

  • 总下载量: 7
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 2
  • 点击次数: 0
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 2
  • Watchers: 2
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: mit
  • 更新时间: 2025-04-30