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