derafu/support
Derafu Support provides essential PHP utilities used across the Derafu core ecosystem. A lightweight helper package focused on common support functions, simplifying everyday development tasks and improving consistency in your applications.
Installation:
composer require derafu/support
Verify PHP 8.5+ compliance via:
php -v
First Use Case:
Use Derafu\Support\Facades\Zip for memory-efficient ZIP creation:
use Derafu\Support\Facades\Zip;
Zip::create('export.zip')
->addFile(public_path('file1.txt'))
->addDirectory(storage_path('logs'))
->save();
Where to Look First:
Zip, Csv, Mime, Collection (see Derafu Docs).config/derafu.php (if auto-generated) for package settings.php artisan test --filter=Derafu to validate core utilities.Pattern: Replace manual instantiation with facades for cleaner code:
// Before (manual)
$zip = new \Derafu\Support\ZipStream();
$zip->addFile(...);
// After (facade)
Zip::create('archive.zip')->addFile(...);
Integration Tip:
AppServiceProvider:
public function boot()
{
\Derafu\Support\Facades\Zip::setStoragePath(storage_path('exports'));
}
Workflow:
// Parse CSV from API response
$csv = Csv::fromString($apiResponse)
->setDelimiter(';')
->toCollection();
// Export to database
User::insert($csv->toArray());
Tip: Chain with Laravel’s Queue for async processing:
dispatch(new ProcessCsvJob($csvData));
Use Case: Dynamic file responses in controllers:
public function download()
{
$path = storage_path('file.pdf');
$mime = Mime::fromPath($path);
return response()->file($path)
->header('Content-Type', $mime);
}
Tip: Cache MIME types in config/derafu.php for performance:
'mime' => [
'cache' => true,
'ttl' => 3600,
],
Pattern: Extend Laravel collections with Derafu methods:
$users = collect($users)
->groupByKey('department.id') // Derafu method
->mapToGroups(fn($user) => ['name' => $user->name]);
Tip: Override Laravel’s Collection alias in config/app.php:
'aliases' => [
'Collection' => Derafu\Support\Facades\Collection::class,
],
Integration:
Storage facade:
use Derafu\Support\Facades\File;
$zip = Zip::create('backup.zip');
Storage::disk('s3')->files()->each(fn($file) => $zip->addFile($file));
$zip->save();
Facade Registration:
DerafuServiceProvider isn’t loaded.config/app.php:
'providers' => [
Derafu\Support\DerafuServiceProvider::class,
],
ZipStream Memory Leaks:
Zip::stream() for server responses:
return Zip::stream('large.zip')
->addFile($largeFile)
->toResponse('archive.zip');
CSV Encoding Issues:
Csv::fromFile('data.csv', 'ISO-8859-1');
Carbon Facade Conflict:
Carbon facade breaks now() helpers.Derafu\Support\Facades\Carbon only in specific contexts.config/derafu.php:
'zip' => [
'debug' => env('APP_DEBUG', false),
],
dd($collection->getDebugDump()) to inspect internals.php-cs-fixer to catch encoding issues early.Custom Zip Handlers:
Zip::extend('custom', function($zip) {
$zip->addPassword('secret');
return $zip;
});
Mime Type Overrides:
Mime::override(['txt' => 'text/plain-custom']);
Collection Macros:
Collection::macro('snakeKeys', function() {
return $this->mapWithKeys(fn($item) => [
Str::snake(key($item)) => $item,
]);
});
Zip::create('fast.zip')->setCompression(false);
Csv::stream() for >10MB files to avoid timeouts.php artisan derafu:clear-mime-cache
Service Provider Integration:
public function register()
{
$this->app->singleton('derafu.zip', fn() => new \Derafu\Support\ZipStream());
}
Command Bus Integration:
use Derafu\Support\Facades\Zip;
class ExportCommand implements ShouldQueue
{
public function handle()
{
Zip::create('export.zip')->addFiles(...)->save();
}
}
Event Listeners:
public function handle(FileExported $event)
{
Zip::create('archive.zip')->addFile($event->path)->save();
}
How can I help you explore Laravel packages today?