frontier / module
Laravel Frontier Modules Package
Installs: 8
Dependents: 0
Suggesters: 2
Security: 0
Stars: 0
Watchers: 1
Forks: 0
Open Issues: 0
pkg:composer/frontier/module
Requires
- php: >=8.2
- illuminate/support: ^10.0|^11.0|^12.0
- internachi/modular: ^2.0
Requires (Dev)
- laravel/pint: ^v1.22.0
README
Frontier Module
Modular architecture for Laravel applications โ A companion package to the Frontier Laravel Starter Kit that enables organizing large applications into self-contained, reusable modules.
โจ Features
- ๐ฆ Modular Organization โ Break large apps into logical, self-contained modules
- ๐ Auto-Discovery โ Commands, migrations, factories, policies, and Blade components work automatically
- ๐ ๏ธ Familiar Tooling โ Use standard
php artisan make:*commands with--moduleflag - ๐ Laravel Conventions โ Follows standard Laravel patterns you already know
- ๐ Lightweight โ Minimal overhead, powered by InterNACHI/Modular
- ๐ค Extractable โ Modules can become separate Composer packages later
- โ
Strict Types โ All classes use
declare(strict_types=1) - ๐งช Pest Testing โ Modern testing framework included
๐ Requirements
| Requirement | Version |
|---|---|
| PHP | 8.2+ |
| Laravel | 10.x, 11.x, or 12.x |
๐ Installation
composer require frontier/module
Laravel will auto-discover the service provider. No additional configuration required.
Optional: Publish Configuration
php artisan vendor:publish --tag=modular-config
๐ Quick Start
Create a Module
# Create a new module php artisan make:module user-management # Update Composer (required after creating modules) composer update modules/user-management
This scaffolds:
app-modules/
โโโ user-management/
โโโ composer.json
โโโ src/
โ โโโ Providers/
โโโ tests/
โโโ routes/
โโโ resources/
โโโ database/
Generate Components
Use standard Laravel make:* commands with --module:
php artisan make:model User --module=user-management php artisan make:controller UserController --module=user-management php artisan make:migration create_users_table --module=user-management php artisan make:request CreateUserRequest --module=user-management
Sync Configuration
# Sync phpunit.xml, PhpStorm settings, etc.
php artisan modules:sync
๐ Module Structure
app-modules/
โโโ my-module/
โโโ composer.json # Module's Composer configuration
โโโ src/
โ โโโ Models/ # Eloquent models
โ โโโ Http/
โ โ โโโ Controllers/ # HTTP controllers
โ โ โโโ Middleware/ # Module-specific middleware
โ โ โโโ Requests/ # Form requests
โ โโโ Providers/ # Service providers
โ โโโ Console/Commands/ # Artisan commands
โ โโโ Jobs/ # Queue jobs
โ โโโ Events/ # Event classes
โ โโโ Listeners/ # Event listeners
โ โโโ Services/ # Business logic services
โโโ tests/
โ โโโ Feature/
โ โโโ Unit/
โโโ routes/
โ โโโ web.php
โ โโโ api.php
โโโ resources/
โ โโโ views/
โ โโโ lang/
โโโ database/
โโโ migrations/
โโโ seeders/
โโโ factories/
๐ก Usage Examples
Module Routes
app-modules/user-management/routes/api.php
<?php declare(strict_types=1); use Illuminate\Support\Facades\Route; use Modules\UserManagement\Http\Controllers\UserController; Route::prefix('api/users')->middleware(['api', 'auth:sanctum'])->group(function () { Route::get('/', [UserController::class, 'index']); Route::post('/', [UserController::class, 'store']); Route::get('/{user}', [UserController::class, 'show']); });
Module Controller
<?php declare(strict_types=1); namespace Modules\UserManagement\Http\Controllers; use Illuminate\Http\JsonResponse; use Modules\UserManagement\Services\UserService; class UserController { public function __construct( private readonly UserService $userService ) {} public function index(): JsonResponse { return response()->json([ 'data' => $this->userService->getAllUsers() ]); } }
Blade Components
Components are auto-registered with module namespace:
// app-modules/dashboard/src/View/Components/StatCard.php namespace Modules\Dashboard\View\Components; use Illuminate\View\Component; class StatCard extends Component { public function __construct( public string $title, public string|int $value ) {} public function render() { return view('dashboard::components.stat-card'); } }
{{-- Usage --}} <x-dashboard::stat-card title="Users" :value="$count" />
Translations
// app-modules/user-management/resources/lang/en/messages.php return [ 'welcome' => 'Welcome, :name!', ]; // Usage __('user-management::messages.welcome', ['name' => $user->name]);
๐ง Artisan Commands
Module Management
| Command | Description |
|---|---|
php artisan make:module <name> |
Create a new module |
php artisan modules:list |
List all modules |
php artisan modules:sync |
Sync project configs |
php artisan modules:cache |
Cache module discovery |
php artisan modules:clear |
Clear module cache |
Supported Make Commands
All Laravel make:* commands support --module:
php artisan make:controller UserController --module=my-module php artisan make:model User --module=my-module php artisan make:migration create_users_table --module=my-module php artisan make:request CreateUserRequest --module=my-module php artisan make:resource UserResource --module=my-module php artisan make:policy UserPolicy --module=my-module php artisan make:event UserCreated --module=my-module php artisan make:listener SendEmail --module=my-module php artisan make:job ProcessUser --module=my-module php artisan make:command ImportUsers --module=my-module php artisan make:factory UserFactory --module=my-module php artisan make:seeder UserSeeder --module=my-module php artisan make:test UserTest --module=my-module
Database Seeding
php artisan db:seed --module=my-module php artisan db:seed --class=UserSeeder --module=my-module
๐ฏ When to Use Modules
โ Use Modules When:
| Scenario | Benefit |
|---|---|
| Large applications (50+ models) | Better organization |
| Multiple domains | Separate bounded contexts |
| Team development | Independent workstreams |
| Potential extraction | Easy to extract as packages |
โ Stick to Traditional Structure When:
| Scenario | Reason |
|---|---|
| Small apps (< 20 models) | Overhead not worth it |
| Simple CRUD apps | No clear domain boundaries |
| Rapid prototyping | Speed over organization |
โ๏ธ Configuration
Custom Namespace
Edit config/app-modules.php:
return [ 'modules_namespace' => 'App\\Modules', // Default: 'Modules' 'modules_path' => base_path('app-modules'), ];
Production Caching
# Add to deployment script
php artisan modules:cache
๐ ๏ธ Development
Running Tests
composer test
Code Linting
composer lint # Fix code style with Pint composer lint:test # Check code style
Rector Refactoring
composer rector # Apply automated refactorings composer rector:dry # Preview changes without applying
๐ Frontier Ecosystem
| Package | Purpose |
|---|---|
| frontier/frontier | Laravel Starter Kit |
| frontier/module | Modular architecture |
| frontier/action | Action pattern |
| frontier/repository | Repository pattern |
๐ Documentation
For comprehensive documentation including advanced examples, inter-module communication patterns, and best practices, see AI_GUIDE.md.
๐ค Contributing
Contributions are welcome! Please see CONTRIBUTING.md for details.
๐ License
The MIT License (MIT). Please see License File for more information.
๐จโ๐ป Author
Mohamed Khedr
Email: 0xkhdr@gmail.com
Made with โค๏ธ for the Laravel community