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
Requires
- php: ^8.2
- codeigniter4/framework: ^4.3
This package is not auto-updated.
Last update: 2025-06-08 23:41:56 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.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.
-
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
-
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.