dennisvandenberg/learning-bundle-2
Installation:
composer require dennisvandenberg/learning-bundle-2
Add the service provider to config/app.php:
'providers' => [
// ...
Dennisvandenberg\LearningBundle\LearningServiceProvider::class,
],
Publish Config:
php artisan vendor:publish --provider="Dennisvandenberg\LearningBundle\LearningServiceProvider"
This generates config/learning.php with default settings.
First Use Case:
Use the Learning facade to fetch a basic learning resource:
use Dennisvandenberg\LearningBundle\Facades\Learning;
$resource = Learning::getResource('example');
config/learning.php – Adjust API endpoints, caching, and logging.Dennisvandenberg\LearningBundle\Facades\Learning – Primary entry point for all functionality.Dennisvandenberg\LearningBundle\Services\LearningService – Core logic for fetching/processing resources.LearningResource or similar in app/Models/ (if extended).Fetching Resources:
// Basic fetch
$resource = Learning::getResource('course_id');
// With custom parameters
$resource = Learning::getResource('course_id', ['filter' => 'advanced']);
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).
Event Listeners:
Subscribe to learning events (e.g., ResourceFetched) in EventServiceProvider:
protected $listen = [
'Dennisvandenberg\LearningBundle\Events\ResourceFetched' => [
'App\Listeners\LogLearningActivity',
],
];
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']);
}
);
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()
);
Deprecated Methods:
The package is outdated (last release 2020). Check for breaking changes if upgrading from learning-bundle-1.
Learning::fetch() may not exist; use getResource() instead.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).
Hardcoded Endpoints: The default API endpoint is hardcoded in the config. Always override it:
'api_endpoint' => env('LEARNING_API_URL', 'https://default-api.com'),
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
]);
Enable Logging:
Set 'debug' => true in config/learning.php to log API requests/responses to storage/logs/learning.log.
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.');
}
Caching Issues: Clear the cache manually if resources aren’t updating:
php artisan cache:clear
php artisan config:clear
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;
}
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();
}
);
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(),
]);
}
);
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'),
How can I help you explore Laravel packages today?