rahpt / ci4modules
Easy Modules in Codeigniter 4
Installs: 7
Dependents: 0
Suggesters: 0
Security: 0
Stars: 2
Watchers: 2
Forks: 0
Open Issues: 0
Type:codeigniter4-module
pkg:composer/rahpt/ci4modules
Requires
- php: ^8.2
 - codeigniter4/framework: ^4.3
 
This package is not auto-updated.
Last update: 2025-11-01 22:40:57 UTC
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:
- 
Cadastro manual de cada módulo
Para que o autoloader reconheça um novo módulo é preciso abrirapp/Config/Autoload.phpe 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.
 - 
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.phpnã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
- 
Boot – um service provider é registrado pelo Composer.
 - 
Scan – durante o startup, ele percorre
modulesPath(nível 1). - 
Register – para cada subpasta encontrada, gera dinamicamente uma entrada PSR‑4 no autoloader interno do CI4:
<AppNamespace>\<ModuleName>\ => <modulesPath>/<ModuleName>/ - 
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
- Fork → crie sua branch (
git checkout -b feature/minha‑feature) - Commit suas alterações (
git commit -m 'feat: nova feature') - 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.