whilesmart / laravel-plugin-engine
Laravel plugin engine for WhileSmart applications
Installs: 150
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 5
pkg:composer/whilesmart/laravel-plugin-engine
Requires
- php: ^8.1
- illuminate/console: ^11.0
- illuminate/database: ^11.45
- illuminate/filesystem: ^11.0
- illuminate/support: ^11.0
Requires (Dev)
- laravel/pint: ^1.0
- laravel/sanctum: ^4.0
- mockery/mockery: ^1.5
- orchestra/testbench: ^9.0
- phpunit/phpunit: ^11.0
This package is auto-updated.
Last update: 2025-11-02 20:07:38 UTC
README
A flexible and powerful plugin system for Laravel applications.
Features
- Plugin discovery and registration
- Enable/disable plugins
- Plugin dependencies
- Console commands for plugin management
- Event-driven architecture
- Easy to extend
Installation
- Install the package via Composer:
composer require whilesmart/laravel-plugin-engine
- Publish the configuration file (optional):
php artisan vendor:publish --provider="WhileSmart\LaravelPluginEngine\Providers\PluginServiceProvider" --tag=config
Configuration
Publish the configuration file:
php artisan vendor:publish --provider="WhileSmart\LaravelPluginEngine\Providers\PluginServiceProvider" --tag=config
Edit the config/plugins.php file to configure the plugin system:
return [ 'path' => base_path('plugins'), // Path where plugins are stored 'namespace' => 'Plugins', // Root namespace for plugins ];
Usage
Available Commands
plugin:list- List all available pluginsplugin:info {id}- Show information about a pluginplugin:enable {id}- Enable a pluginplugin:disable {id}- Disable a pluginplugin:install {package}- Install a pluginplugin:discover- Discover and register all available plugins
Creating a Plugin
- Create a new directory in the
pluginsdirectory (or your configured path) - Create a
plugin.jsonfile with the following structure:
{
"id": "example-plugin",
"name": "Example Plugin",
"description": "A sample plugin",
"version": "1.0.0",
"namespace": "Plugins\\Example",
"provider": "Plugins\\Example\\ExampleServiceProvider",
"enabled": true,
"requires": {
"php": ">=8.1",
"laravel/framework": "^10.0"
}
}
- Create a service provider for your plugin:
<?php namespace Plugins\Example; use Illuminate\Support\ServiceProvider; class ExampleServiceProvider extends ServiceProvider { public function register() { // Register bindings } public function boot() { // Boot logic $this->loadRoutesFrom(__DIR__.'/routes/web.php'); $this->loadViewsFrom(__DIR__.'/resources/views', 'example'); $this->loadMigrationsFrom(__DIR__.'/database/migrations'); } }
Plugin Structure
plugins/
example-plugin/
src/
Http/
Controllers/
Models/
Providers/
ExampleServiceProvider.php
resources/
views/
routes/
web.php
database/
migrations/
plugin.json
README.md
Events
The plugin system dispatches several events that you can listen for:
WhileSmart\PluginEngine\Events\PluginEnabling- Fired before a plugin is enabledWhileSmart\PluginEngine\Events\PluginEnabled- Fired after a plugin is enabledWhileSmart\PluginEngine\Events\PluginDisabling- Fired before a plugin is disabledWhileSmart\PluginEngine\Events\PluginDisabled- Fired after a plugin is disabledWhileSmart\PluginEngine\Events\PluginInstalled- Fired after a plugin is installedWhileSmart\PluginEngine\Events\PluginDiscovered- Fired when a plugin is discovered
License
This project is open-source and licensed under the MIT License.