The Modular PHP Framework with Zero Magic
This repository contains the official modules for the Forge PHP Framework. Follows the core philosophy of:
- 🧩 Explicit Control - No hidden magic, you dictate the flow
- 📦 Modular Architecture - Use only what you need
- 🛠️ Zero Dependencies - Pure PHP components
- 🔒 Security First - Safe defaults and clear patterns
- Core Modules
- Module Structure
- Installation
- Configuration
- CLI Commands
- Creating Modules
- Contributing
- License
- Database abstraction layer
- Multiple driver support (MySQL, PostgreSQL, SQLite)
- Query builder with parameter binding
$results = $db->query("SELECT * FROM users WHERE active = ?", [1]);- Active Record implementation
- Schema migrations system
- Model relationships (hasMany, belongsTo)
class User extends Model {
protected $table = 'users';
protected $fillable = ['name', 'email'];
}- Module discovery and installation
- Dependency resolution
- Registry management
php forge.php install:module forge-logger- Multiple log channels (file, syslog, stderr)
- PSR-3 compatible interface
- Rotating file handler
$logger->info('User logged in', ['user_id' => 42]);A Forge module requires this basic structure:
module-name/
├── forge.json # Module manifest
├── src/ # PHP classes
├── Database/ # Optional
│ ├── Migrations/ # Database migrations
│ └── Seeds/ # Database seeds
├── config/ # Configuration files
└── Cli/ # CLI commands
{
"$schema": "https://raw.githubusercontent.com/upperdo/forge-schemas/main/schemas/modules/schema.json",
"name": "forge-logger",
"description": "Official logging module",
"version": "1.0.0",
"provides": [
"LoggerInterface@1.0"
],
"requires": [
"ErrorHandlerInterface@1.1"
],
"class": "Forge\\Modules\\Logger\\LoggerModule"
}- Clone module into
modules/directory - Add to your application bootstrap:
$forge->registerModule(\Forge\Modules\Logger\LoggerModule::class);php forge.php install:module forge-loggerConfigure modules through config/modules.php:
return [
'logger' => [
'default' => 'file',
'channels' => [
'file' => [
'path' => storage_path('logs/app.log'),
'level' => 'debug'
]
]
]
];| Command | Description |
|---|---|
php forge.php install:module <name> |
Install a module |
php forge.php remove:module <name> |
Remove a module |
php forge.php list:modules |
Show installed modules |
php forge.php migrate |
Run database migrations |
php forge.php seed |
Run database seeds |
- Create module structure:
mkdir -p modules/MyModule/src- Create
forge.json:
{
"name": "my-module",
"description": "My custom module",
"version": "1.0.0",
"class": "Forge\\Modules\\MyModule\\MyModule"
}- Create module class:
namespace Forge\Modules\MyModule;
use Forge\Core\Contracts\Modules\ModulesInterface;
class MyModule implements ModulesInterface
{
public function register(Container $container): void
{
// Register your services here
}
}- Add to your application:
$forge->registerModule(\Forge\Modules\MyModule\MyModule::class);We welcome contributions! Please follow these guidelines:
- Fork the repository
- Create a feature branch
- Follow our coding standards:
- PSR-12 coding style
- Strict type declarations
- Documented PHPDoc blocks
- Submit a Pull Request
- Create a new directory under
modules/ - Include complete documentation
- Add unit tests (PHPUnit)
- Ensure
forge.jsonis properly configured - Submit PR for review
Forge Modules are open-source software licensed under the MIT license.
📚 Full Documentation | 🐛 Report Issues | 💡 Feature Requests
Forge Framework - Build explicitly, scale infinitely