Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Laravel Larakit Spa Laravel Package

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.

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Setup

  1. Installation

    composer require larakit/laravel-larakit-spa
    

    Publish the config file (if needed):

    php artisan vendor:publish --provider="Larakit\SPA\SPAServiceProvider"
    
  2. 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
        }
    }
    
  3. First Use Case Use the spa() helper to register a provider dynamically:

    spa('deferredProvider');
    

Implementation Patterns

Deferred Registration Workflows

  1. Lazy-Loading Providers Register providers only when needed (e.g., for heavy dependencies):

    if (request()->wantsJson()) {
        spa('apiProvider');
    }
    
  2. Conditional Aliases Dynamically bind aliases based on runtime conditions:

    spa('authProvider', [
        'alias' => request()->has('admin') ? 'adminAuth' : 'userAuth',
    ]);
    
  3. Priority Management Override default provider priority:

    spa('cacheProvider', ['priority' => 200]);
    

Integration Tips

  • 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');
    });
    

Gotchas and Tips

Pitfalls

  1. Circular Dependencies Avoid registering providers that depend on each other in a circular manner. Use spa() sparingly for complex dependencies.

  2. Priority Conflicts Overriding Laravel’s default provider priorities (e.g., AppServiceProvider) may cause unexpected behavior. Test thoroughly.

  3. 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.

Debugging

  • 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]);
    

Extension Points

  1. Custom Registration Logic Extend the Larakit\SPA\SPAServiceProvider to add custom registration hooks:

    public function register()
    {
        parent::register();
        // Custom logic
    }
    
  2. Dynamic Config Overrides Override config/spa.php dynamically:

    config(['spa.providers' => [
        'newProvider' => ['alias' => 'dynamicAlias'],
    ]]);
    spa('newProvider');
    
  3. Provider Validation Validate provider configurations in config/spa.php:

    'providers' => [
        'App\Providers\ValidProvider' => [
            'alias' => 'valid',
            'priority' => 100,
            'requires' => ['database'], // Optional: Define dependencies
        ],
    ],
    
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
emuniq/filament-browser-notifications
syriable/filament-translator
hungnm28/livewire-form
wenprise/eloquent
crudly/encrypted
fadion/bouncy
cuci/prototurk-sdk
gos/pubsub-router-bundle
cuci/prototurk-sdk-symfony
clementtalleu/easyadmin-markdown-bundle
codeflextech/permission-manager
karnoweb/livewire-datepicker
sayedenam/sayed-dashboard
milito/query-filter
apiboxsym/user-bundle
apiboxsym/health-check-bundle
jayeshmepani/jpl-moshier-ephemeris-php
elnasnato/laraliveui
labrodev/rest-sdk
sampaui/sampaui