common-gateway/open-belasting-bundle
OpenBelastingBundle is a Symfony Flex bundle designed to interact with the PINK Open Belastingen API (Dutch tax assessment API), handling:
symfony/http-client, symfony/serializer, etc.) allows partial integration. However, full bundle compatibility is unlikely without refactoring.bind()/singleton()).HttpClient).validate() or API Resources.EventDispatcher → Laravel Events (similar abstraction).config/packages/ → Laravel’s config/open_belasting.php (minimal refactor).| Risk Area | Severity | Mitigation Strategy |
|---|---|---|
| Symfony Dependency | High | Abstract core logic (API calls, validation) into a Laravel-compatible library. |
| ORM Mismatch | Medium | Use DTOs or API Resources to decouple from Doctrine. |
| Event System | Low | Laravel’s event system is functionally equivalent. |
| Testing Overhead | Medium | Rewrite tests using Laravel’s PHPUnit + Pest. |
| Maintenance Gap | Medium | Fork the repo or contribute upstream for Laravel support. |
Is the bundle’s API interaction logic reusable without Symfony?
common-gateway/open-belasting-client).Does the project require Doctrine ORM, or can Eloquent suffice?
What’s the long-term maintenance plan?
Are there existing Laravel packages for PINK API?
What’s the data flow complexity?
| Component | Symfony Bundle | Laravel Equivalent | Notes |
|---|---|---|---|
| HTTP Client | HttpClient |
Guzzle HTTP | Direct replacement. |
| Serialization | Serializer |
Laravel Serializer / API Resources | Manual mapping conversion needed. |
| Dependency Injection | DI Container | Laravel Service Container | Use bind() or Facades. |
| Events | EventDispatcher |
Laravel Events | 1:1 functional replacement. |
| Validation | Symfony Validator | Laravel Validator | Use validate() or custom rules. |
| ORM | Doctrine | Eloquent / Query Builder | Rewrite models or use DTOs. |
| Configuration | config/packages/ |
config/open_belasting.php |
Simple key-value migration. |
Phase 1: API Client Extraction (Low Risk)
// Symfony (Original)
$client = new Client();
$response = $client->request('GET', '...');
// Laravel (Adapted)
$response = Http::get('...');
Http::macro()).Phase 2: Data Mapping (Medium Risk)
// Symfony (Doctrine)
$assessment = $entityManager->find(Assessment::class, $id);
// Laravel (Eloquent)
$assessment = Assessment::find($id);
Phase 3: Event System (Low Risk)
EventDispatcher with Laravel’s Event::dispatch().// Symfony
$dispatcher->dispatch(new AssessmentCreatedEvent($assessment));
// Laravel
event(new AssessmentCreated($assessment));
Phase 4: Configuration (Minimal Risk)
config/packages/open_belasting.yaml to Laravel’s config/open_belasting.php.php artisan config:cache).Phase 5: Testing (Ongoing)
$this->get(), Http::fake()).// Symfony (PHPUnit)
$client = static::createClient();
$crawler = $client->request('GET', '/assessments');
// Laravel (Pest)
$response = $this->get('/assessments');
$response->assertOk();
HttpClient and Serializer have Laravel equivalents.symfony/http-client).var_dump() → Laravel’s dd() or Log::debug().DB::enableQueryLog()).How can I help you explore Laravel packages today?