Installation
composer require blast-project/resource-bundle
Add the service provider to config/app.php:
'providers' => [
// ...
Blast\ResourceBundle\ResourceBundleServiceProvider::class,
],
Publish Config
php artisan vendor:publish --provider="Blast\ResourceBundle\ResourceBundleServiceProvider" --tag="config"
This generates config/resource-bundle.php with default settings.
First Use Case: Temporary File Storage
use Blast\ResourceBundle\Facades\ResourceBundle;
// Store a temporary resource (e.g., uploaded file)
$resource = ResourceBundle::store('my-temp-file.txt', file_get_contents('path/to/file'));
// Retrieve later (valid until expiration)
$content = ResourceBundle::retrieve($resource->getId());
Temporary Resource Management
$tempId = ResourceBundle::store('user_avatar.jpg', $request->file('avatar')->get());
// Process form...
if ($valid) {
$user->avatar = ResourceBundle::retrieve($tempId)->getPath();
}
config('resource-bundle.ttl') (default: 1 hour).Integration with Laravel Features
local, s3) via config:
'disk' => 's3', // Override default 'local'
ResourceBundle\Events\ResourceStored/ResourceExpired:
Event::listen(ResourceExpired::class, function ($event) {
Log::debug("Resource {$event->id} expired");
});
Bulk Operations
$batch = ResourceBundle::batchStore([
'file1' => file_get_contents('path1'),
'file2' => file_get_contents('path2'),
]);
// Retrieve by key: $batch['file1']->getContent()
Custom Metadata
$resource = ResourceBundle::store('data.json', $data, [
'user_id' => auth()->id(),
'purpose' => 'profile_export',
]);
// Retrieve metadata: $resource->getMetadata()
TTL Misconfiguration
'ttl' => 60 * 24, // 24 hours
$resource->isExpired(); // Returns bool
Disk Space Risks
max_size config to limit total storage:
'max_size' => 100 * 1024 * 1024, // 100MB
max_size; implement a cron job to prune expired resources:
php artisan resource:bundle:prune
Race Conditions
ResourceNotFoundException. Handle gracefully:
try {
$content = ResourceBundle::retrieve($id);
} catch (ResourceNotFoundException $e) {
// Fallback logic
}
Filesystem Permissions
php artisan storage:link
Naming Conventions
$resource = ResourceBundle::store('data.json', $data, [
'id' => Str::uuid()->toString(),
]);
Testing
$this->app->bind(ResourceBundle::class, function () {
return new ResourceBundle(config(['resource-bundle.ttl' => 1]));
});
Extension Points
Blast\ResourceBundle\Contracts\ResourceStorage for databases or cloud storage.ResourceBundle\Events\ResourceCustomEvent for domain-specific logic.Logging
'debug' => env('APP_DEBUG', false),
storage/logs/laravel.log for storage/retrieval events.Performance
'log_metadata' => false,
How can I help you explore Laravel packages today?