spatie/laravel-personal-data-export
Generate GDPR-style personal data exports as ZIP files in Laravel. Define what to include via a model method, add JSON and files (local or S3), store zips privately, email users a download link, and clean up old exports with an artisan command.
PersonalDataExporter, PersonalDataExportJob) aligns with Laravel’s job-based async processing.UserDataCollector, RelatedModelDataCollector) for granular control over exported data.PersonalDataExported, PersonalDataExportFailed) for post-processing (e.g., logging, analytics).composer require spatie/laravel-personal-data-export
php artisan vendor:publish --provider="Spatie\PersonalDataExport\PersonalDataExportServiceProvider"
collect() methods.select *).
Mitigation: Implement chunking in collectors or use Laravel’s cursor() for large datasets.spatie/laravel-* packages.auth()->user(); compatible with Laravel’s session/cache drivers.Mailable system (e.g., PersonalDataExportMailable).database, redis, beanstalkd).ZipArchive (built into PHP) and symfony/mailer for emails.composer require spatie/laravel-personal-data-export
php artisan vendor:publish --provider="Spatie\PersonalDataExport\PersonalDataExportServiceProvider"
config/personal-data-export.php (e.g., storage path, email template).PersonalDataCollector for each model:
use Spatie\PersonalDataExport\PersonalDataCollector;
class UserDataCollector extends PersonalDataCollector
{
public function collect(User $user): array
{
return [
'name' => $user->name,
'email' => $user->email,
// Add related data via relationships
'orders' => $user->orders->map(fn ($order) => $order->toArray()),
];
}
}
PersonalDataExportServiceProvider.Route::post('/export-data', function () {
dispatch(new CreatePersonalDataExportJob(auth()->user()));
return back()->with('status', 'Export started!');
});
PersonalDataExportMailable).PersonalDataCollector interface.flysystem/aws-s3) is compatible.Post with comments).PersonalDataExportServiceProvider boot method).config/personal-data-export.php (e.g., storage path, zip filename).PersonalDataExportJob, PersonalDataExportMailable).spatie/laravel-personal-data-export for breaking changes.// In PersonalDataExportServiceProvider
$this->app->bind(
CreatePersonalDataExportJob::class,
fn () => new CreatePersonalDataExportJob($user)
);
PersonalDataExported event).failed_jobs table.storage/app/personal-data-exports).select *:
public function collect(User $user): array
{
return [
'orders' => $user->orders()->limit(100)->get()->toArray(),
];
}
How can I help you explore Laravel packages today?