This directory is for custom modules that extend OpenMES functionality.
- Create a new directory:
modules/YourModuleName/ - Create a service provider:
Providers/YourModuleServiceProvider.php - Register your event listeners in the service provider
- Add your provider to
config/app.phpor use auto-discovery
modules/
└── NotificationModule/
├── Providers/
│ └── NotificationModuleServiceProvider.php
├── Listeners/
│ ├── SendWorkOrderEmail.php
│ └── SendBatchCompletedSMS.php
├── config/
│ └── notifications.php
├── module.json
└── README.md
See HOOKS.md for a complete list of available hooks and events.
- Keep modules independent - Don't depend on other modules
- Use semantic versioning - Version your module (1.0.0, 1.1.0, etc.)
- Document everything - Include a README.md
- Test your code - Write tests for your listeners
- Handle errors gracefully - Use try-catch blocks
- Use queues for heavy operations - Implement ShouldQueue
// modules/NotificationModule/Providers/NotificationModuleServiceProvider.php
<?php
namespace Modules\NotificationModule\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Event;
use App\Events\WorkOrder\WorkOrderCompleted;
use Modules\NotificationModule\Listeners\SendCompletionEmail;
class NotificationModuleServiceProvider extends ServiceProvider
{
public function boot(): void
{
// Register event listener
Event::listen(
WorkOrderCompleted::class,
SendCompletionEmail::class
);
// Load config
$this->publishes([
__DIR__.'/../config/notifications.php' => config_path('notifications.php'),
], 'config');
}
public function register(): void
{
$this->mergeConfigFrom(
__DIR__.'/../config/notifications.php',
'notifications'
);
}
}// modules/NotificationModule/Listeners/SendCompletionEmail.php
<?php
namespace Modules\NotificationModule\Listeners;
use App\Events\WorkOrder\WorkOrderCompleted;
use Illuminate\Support\Facades\Mail;
use Illuminate\Contracts\Queue\ShouldQueue;
class SendCompletionEmail implements ShouldQueue
{
public function handle(WorkOrderCompleted $event): void
{
$workOrder = $event->workOrder;
Mail::to(config('notifications.email'))
->send(new \App\Mail\WorkOrderCompletedMail($workOrder));
}
}- Copy module to
modules/directory - Add service provider to
config/app.php:
'providers' => [
// ...
Modules\YourModule\Providers\YourModuleServiceProvider::class,
],- Run migrations if needed:
php artisan migrate- Clear cache:
php artisan config:clear
php artisan cache:clearWant to share your module with the community?
- Create a GitHub repository
- Add installation instructions
- Submit to the OpenMES modules directory (coming soon!)
For help creating modules:
- See HOOKS.md for available hooks
- Check GitHub issues
- Join our community discussions