5.3.0
This release focuses on improving developer experience with powerful new features while maintaining full backward compatibility.
π Fluent Query API
Chain filters and transformations for elegant segment querying:
// Find German suppliers
$suppliers = $message->query()
->withTag('NAD')
->withSubId('SU')
->where(fn($s) => $s->countryCode() === 'DE')
->limit(10)
->get();
// Extract company names
$names = $message->query()
->withTag('NAD')
->map(fn($s) => $s->name());Features:
- Filtering: withTag(), withTags(), withSubId(), where(), ofType()
- Pagination: limit(), skip()
- Access: first(), last(), get()
- Aggregation: count(), exists(), isEmpty()
- Transformation: map(), each()
β¨ Typed Accessor Methods
Replace magic array indices with self-documenting methods:
// Before
$name = $nadSegment->rawValues()[4];
// After
$name = $nadSegment->name();
$city = $nadSegment->city();
$postal = $nadSegment->postalCode();Enhanced segments:
- NAD: name(), street(), city(), postalCode(), countryCode()
- QTY: quantity(), quantityAsFloat(), measureUnit()
- PRI: price(), priceAsFloat(), priceType()
- LIN: lineNumber(), itemNumber(), itemTypeCode()
- DTM: dateTime(), asDateTime() (parses to DateTimeImmutable)
- RFF: qualifier(), referenceNumber()
- UNH: messageType(), messageVersionNumber()
π Debug Helpers
$segment->toArray(); // Convert to array
$segment->toJson(); // Pretty-print JSON
$message->messageType(); // Quick type detection (ORDERS, INVOIC, etc.)π Enhanced Error Messages
InvalidFile::withContext($errors, ['segment_index' => 42]);
$exception->getErrors();
$exception->getContext();π Documentation & Examples
- Updated examples to showcase new fluent API
- Added comprehensive query filtering examples
- New
example/query-filtering.phpwith 10 practical examples
Full Changelog: 5.2.0...5.3.0