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

Learning Bundle 2 Laravel Package

dennisvandenberg/learning-bundle-2

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Setup

  1. Installation:

    composer require dennisvandenberg/learning-bundle-2
    

    Add the service provider to config/app.php:

    'providers' => [
        // ...
        Dennisvandenberg\LearningBundle\LearningServiceProvider::class,
    ],
    
  2. Publish Config:

    php artisan vendor:publish --provider="Dennisvandenberg\LearningBundle\LearningServiceProvider"
    

    This generates config/learning.php with default settings.

  3. First Use Case: Use the Learning facade to fetch a basic learning resource:

    use Dennisvandenberg\LearningBundle\Facades\Learning;
    
    $resource = Learning::getResource('example');
    

Where to Look First

  • Config File: config/learning.php – Adjust API endpoints, caching, and logging.
  • Facade: Dennisvandenberg\LearningBundle\Facades\Learning – Primary entry point for all functionality.
  • Service Class: Dennisvandenberg\LearningBundle\Services\LearningService – Core logic for fetching/processing resources.
  • Models: Check for LearningResource or similar in app/Models/ (if extended).

Implementation Patterns

Core Workflows

  1. Fetching Resources:

    // Basic fetch
    $resource = Learning::getResource('course_id');
    
    // With custom parameters
    $resource = Learning::getResource('course_id', ['filter' => 'advanced']);
    
  2. Caching: Enable caching in config/learning.php:

    'cache_enabled' => true,
    'cache_driver' => 'file', // or 'redis', 'database'
    

    Resources auto-cache for 24h by default (configurable via cache_ttl).

  3. Event Listeners: Subscribe to learning events (e.g., ResourceFetched) in EventServiceProvider:

    protected $listen = [
        'Dennisvandenberg\LearningBundle\Events\ResourceFetched' => [
            'App\Listeners\LogLearningActivity',
        ],
    ];
    
  4. API Integration: Override the default API client by binding a custom HTTP client in LearningServiceProvider:

    $this->app->bind(
        \Dennisvandenberg\LearningBundle\Contracts\LearningClient::class,
        function ($app) {
            return new \GuzzleHttp\Client(['base_uri' => 'https://custom-api.com']);
        }
    );
    

Integration Tips

  • Laravel Mix/Blade: Pass learning resources to views:

    $resources = Learning::getResources(['course1', 'course2']);
    return view('learning.dashboard', compact('resources'));
    

    Blade template:

    @foreach($resources as $resource)
        <div>{{ $resource->title }}</div>
    @endforeach
    
  • Queue Jobs: Offload heavy processing (e.g., syncing resources) to queues:

    use Dennisvandenberg\LearningBundle\Jobs\SyncLearningResources;
    
    SyncLearningResources::dispatch();
    
  • Testing: Mock the learning client in tests:

    $this->app->instance(
        \Dennisvandenberg\LearningBundle\Contracts\LearningClient::class,
        Mockery::mock()
    );
    

Gotchas and Tips

Pitfalls

  1. Deprecated Methods: The package is outdated (last release 2020). Check for breaking changes if upgrading from learning-bundle-1.

    • Example: Learning::fetch() may not exist; use getResource() instead.
  2. No Eloquent Models: The package doesn’t include database models by default. You’ll need to create them manually (e.g., php artisan make:model LearningResource).

  3. Hardcoded Endpoints: The default API endpoint is hardcoded in the config. Always override it:

    'api_endpoint' => env('LEARNING_API_URL', 'https://default-api.com'),
    
  4. No Rate Limiting: The package lacks built-in rate limiting. Implement middleware or use a decorator pattern:

    $client = new \Dennisvandenberg\LearningBundle\Clients\LearningClient();
    $client = new \GuzzleHttp\HandlerStack([
        new \GuzzleHttp\Middleware::retry($retryConfig),
        // Add rate limiting middleware
    ]);
    

Debugging

  1. Enable Logging: Set 'debug' => true in config/learning.php to log API requests/responses to storage/logs/learning.log.

  2. HTTP Client Errors: Wrap API calls in a try-catch to handle failures gracefully:

    try {
        $resource = Learning::getResource('id');
    } catch (\Dennisvandenberg\LearningBundle\Exceptions\LearningException $e) {
        Log::error($e->getMessage());
        return back()->with('error', 'Failed to load resource.');
    }
    
  3. Caching Issues: Clear the cache manually if resources aren’t updating:

    php artisan cache:clear
    php artisan config:clear
    

Extension Points

  1. Custom Resource Types: Extend the LearningResource class or use traits to add custom fields:

    namespace App\Models;
    
    use Dennisvandenberg\LearningBundle\Traits\HasLearningMetadata;
    
    class CustomLearningResource extends \Dennisvandenberg\LearningBundle\Models\LearningResource
    {
        use HasLearningMetadata;
    }
    
  2. API Response Transformers: Override the response transformer to modify data before caching:

    $this->app->bind(
        \Dennisvandenberg\LearningBundle\Contracts\ResponseTransformer::class,
        function () {
            return new \App\Transformers\CustomLearningTransformer();
        }
    );
    
  3. Middleware: Add middleware to the learning service provider to validate requests:

    $this->app->resolving(
        \Dennisvandenberg\LearningBundle\Services\LearningService::class,
        function ($service) {
            $service->setMiddleware([
                new \App\Http\Middleware\ValidateLearningRequest(),
            ]);
        }
    );
    

Config Quirks

  • Environment Variables: Prefix learning-related env vars with LEARNING_ (e.g., LEARNING_API_KEY). Example .env:

    LEARNING_API_URL=https://your-api.com
    LEARNING_API_KEY=your_key_here
    
  • Default Values: The package uses null as a default for optional config values. Explicitly set them to avoid runtime issues:

    'cache_driver' => env('LEARNING_CACHE_DRIVER', 'file'),
    
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.
milito/query-filter
apiboxsym/user-bundle
apiboxsym/health-check-bundle
jayeshmepani/jpl-moshier-ephemeris-php
elnasnato/laraliveui
labrodev/rest-sdk
sampaui/sampaui
babelqueue/php-sdk
facebook/capi-param-builder-php
babelqueue/symfony
hamzi/corewatch
minionfactory/raw-hydrator
hexters/coinpayment
rjcodes/rjcms
act-training/laravel-permissions-manager
alimarchal/laravel-chart-of-accounts
babenkoivan/elastic-scout-driver
mkwebdesign/filament-watchdog-v5
renatomarinho/laravel-page-speed
zedmagdy/filament-business-hours