rumenx / php-vcard
Framework-agnostic PHP package to generate vCard files, with Laravel and Symfony support.
v1.0.0
2025-06-07 15:04 UTC
Requires
- php: ^8.3 || ^8.4
Requires (Dev)
- illuminate/container: ^12.17
- illuminate/support: ^12.17
- pestphp/pest: ^2.0
This package is auto-updated.
Last update: 2025-06-08 05:48:48 UTC
README
A framework-agnostic PHP package to generate vCard files (compatible with iPhone, Android, Gmail, iCloud, etc.), with out-of-the-box support for Laravel and Symfony.
Features
- Generate vCard files as static files or HTTP responses
- Compatible with major contact managers (iOS, Android, Gmail, iCloud, etc.)
- Simple, extensible API
- 100% test coverage with Pest
- MIT License
Installation
composer require rumenx/php-vcard
Usage
Basic Usage
use rumenx\VCard\VCard; $vcard = new VCard(); $vcard->addName('Jon', 'Snow'); $vcard->addEmail('jon@example.com'); $vcard->addPhone('+1234567890'); $vcard->addAddress('123 Main St', 'City', 'State', '12345', 'Country'); // Save to file $vcard->saveToFile('jon_snow.vcf'); // Or get as string $content = $vcard->toString();
Laravel Example
use Rumenx\PhpVcard\VCard; // Option 1: Dependency Injection (recommended) Route::get('/vcard', function (VCard $vcard) { $vcard->addName('Arya', 'Stark'); $vcard->addEmail('arya@example.com'); $vcard->addPhone('+1987654321'); return response($vcard->toString(), 200, [ 'Content-Type' => 'text/vcard', 'Content-Disposition' => 'attachment; filename="arya_stark.vcf"', ]); }); // Option 2: Facade use VCard; Route::get('/vcard-facade', function () { VCard::addName('Arya', 'Stark'); VCard::addEmail('arya@example.com'); VCard::addPhone('+1987654321'); return response(VCard::toString(), 200, [ 'Content-Type' => 'text/vcard', 'Content-Disposition' => 'attachment; filename="arya_stark.vcf"', ]); });
Symfony Example
use Rumenx\PhpVcard\VCard; use Symfony\Component\HttpFoundation\Response; // ... $vcard = new VCard(); $vcard->addName('Alice', 'Brown'); $vcard->addEmail('alice@example.com'); $vcard->addPhone('+1122334455'); $response = new Response( $vcard->toString(), 200, [ 'Content-Type' => 'text/vcard', 'Content-Disposition' => 'attachment; filename="alice_brown.vcf"', ] );
Testing
./vendor/bin/pest --coverage
License
This project is licensed under the MIT License.