Runtime Usage
Once extensions are discovered, use the provided services, HTTP API and Artisan commands to control them.
Extension Service
The Extensions facade resolves the ExtensionService. It exposes methods for querying and controlling extensions.
Querying
Extensions::discover(); // Rescan extension directories
Extensions::all(); // All discovered extensions
Extensions::enabled(); // Only enabled extensions
Extensions::disabled(); // Only disabled extensions
Extensions::get('blog'); // Extension by id
Extensions::find('blog'); // Extension by id or name
Extensions::findByName('Blog'); // Extension by name
Extensions::findByNameAndType('Blog', 'Modules'); // Name and type
Extensions::one('blog', 'Modules'); // Id or name with optional type
Extensions::allByType('Modules'); // All extensions for a type
Extensions::enabledByType('Themes'); // Enabled extensions for a type
Extensions::disabledByType('Themes');// Disabled extensions for a type
Extensions::types(); // Registered extension types
Extensions::typedPaths(); // Map of type => path
Extensions::pathForType('Themes'); // Path for a given type
Lifecycle
Extensions::enable('blog'); // Enable extension by id
Extensions::disable('shop'); // Disable extension by id
Extensions::installDependencies('shop'); // Install missing packages
Extensions::installAndEnable('blog'); // Install deps then enable
Extensions::migrate('blog'); // Run migrations
Extensions::delete('old'); // Remove extension from disk
Extensions::reloadActive(); // Re-bootstrap enabled extensions
Extensions::missingPackages('blog'); // List missing composer packages
Asynchronous Operations
Extensions::enableAsync('blog'); // Queue enable
Extensions::disableAsync('shop'); // Queue disable
Extensions::installDepsAsync('shop'); // Queue dependency install
Extensions::installAndEnableAsync('blog'); // Queue install + enable
Extensions::getOperationStatus($id); // Check queued operation status
Extensions::getExtensionOperations('blog'); // List operations for extension
Extensions::isOperationPending('blog', 'enable'); // Check if operation pending
Extensions::enableQueued('blog'); // Legacy alias for enableAsync
Extensions::disableQueued('shop'); // Legacy alias for disableAsync
Extensions::installDepsQueued('shop'); // Legacy alias for installDepsAsync
All enable/disable logic flows through the service to enforce dependencies, switch types and protection rules.
All routes return JSON responses describing the action result.
Operation Insights
Extensions::getExtensionWithOperations('blog'); // Extension details + operations
Extensions::getAllWithOperations(); // All extensions with operations
Extensions::getOperationsSummary(); // Aggregated operation stats
Events
The package emits events for common lifecycle actions:
| Event | Fired when |
|---|---|
ExtensionDiscoveredEvent | Extension manifests are scanned |
ExtensionEnabledEvent | An extension is enabled |
ExtensionDisabledEvent | An extension is disabled |
ExtensionDeletedEvent | An extension is removed from disk |
ExtensionDepsInstalledEvent | Dependency installation completes |
Listen for events using the standard Laravel event system:
use Gigabait93\Extensions\Events\ExtensionEnabledEvent;
use Illuminate\Support\Facades\Event;
Event::listen(ExtensionEnabledEvent::class, function (ExtensionEnabledEvent $event) {
logger()->info('Enabled ' . $event->extension->name);
});
Example Workflow
Extensions::discover(); // Scan for manifests
Extensions::enable('blog'); // Turn on the blog module
Extensions::migrate('blog'); // Run its migrations
Artisan Commands
Interactive commands provide the same functionality in the console and return structured OpResult objects describing success or failure:
php artisan extensions:list {--type=} {--enabled} {--disabled}
php artisan extensions:discover
php artisan extensions:enable {id?} {--type=} {--all}
php artisan extensions:disable {id?} {--type=} {--all}
php artisan extensions:install-deps {id?} {--type=} {--all}
php artisan extensions:reload-active
php artisan extensions:migrate {id?} {--type=} {--all}
php artisan extensions:delete {id?} {--type=} {--all}
php artisan extensions:publish {--tag=} {--force}
Use php artisan help extensions:enable to read command-specific help.
Examples
Publish only translations:
php artisan extensions:publish --tag=extensions-lang
Select resources interactively:
php artisan extensions:publish
Publish everything with force:
php artisan extensions:publish --tag=extensions --force