larakit/laravel-larakit-spa
Laravel package to build SPA-style apps in a Laravel project, providing helpers and integrations for single-page navigation and front-end bootstrapping within the Larakit ecosystem.
Installation
composer require larakit/laravel-larakit-spa
Publish the config file (if needed):
php artisan vendor:publish --provider="Larakit\SPA\SPAServiceProvider"
Basic Usage
Register a deferred service provider in config/spa.php:
'providers' => [
'App\Providers\DeferredServiceProvider' => [
'alias' => 'deferredProvider',
'priority' => 100,
],
],
Define the provider in app/Providers/DeferredServiceProvider.php:
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class DeferredServiceProvider extends ServiceProvider
{
public function register()
{
// Your deferred registration logic
}
}
First Use Case
Use the spa() helper to register a provider dynamically:
spa('deferredProvider');
Lazy-Loading Providers Register providers only when needed (e.g., for heavy dependencies):
if (request()->wantsJson()) {
spa('apiProvider');
}
Conditional Aliases Dynamically bind aliases based on runtime conditions:
spa('authProvider', [
'alias' => request()->has('admin') ? 'adminAuth' : 'userAuth',
]);
Priority Management Override default provider priority:
spa('cacheProvider', ['priority' => 200]);
Service Container Hooks
Use spa() in boot() methods to conditionally load providers:
public function boot()
{
if (config('app.env') === 'local') {
spa('debugProvider');
}
}
Middleware Integration Register providers in middleware for route-specific loading:
public function handle($request, Closure $next)
{
spa('routeSpecificProvider');
return $next($request);
}
Event-Driven Registration Trigger provider registration via events:
Event::listen('provider:register', function () {
spa('eventTriggeredProvider');
});
Circular Dependencies
Avoid registering providers that depend on each other in a circular manner. Use spa() sparingly for complex dependencies.
Priority Conflicts
Overriding Laravel’s default provider priorities (e.g., AppServiceProvider) may cause unexpected behavior. Test thoroughly.
Late Binding Issues
If a provider is registered too late, its bindings may not be available in earlier service calls. Use spa() early in the request lifecycle.
Check Registration Order
Use Artisan::call('config:clear') and Artisan::call('cache:clear') to reset state and debug registration order.
Log Provider Registration
Add logging in register() methods to track when providers are loaded:
\Log::debug('Provider registered:', ['provider' => static::class]);
Custom Registration Logic
Extend the Larakit\SPA\SPAServiceProvider to add custom registration hooks:
public function register()
{
parent::register();
// Custom logic
}
Dynamic Config Overrides
Override config/spa.php dynamically:
config(['spa.providers' => [
'newProvider' => ['alias' => 'dynamicAlias'],
]]);
spa('newProvider');
Provider Validation
Validate provider configurations in config/spa.php:
'providers' => [
'App\Providers\ValidProvider' => [
'alias' => 'valid',
'priority' => 100,
'requires' => ['database'], // Optional: Define dependencies
],
],
How can I help you explore Laravel packages today?