Typed Metadata
Metadata is a read-only accessor over the decoded top-level mapping. Values
are typed during decoding, and getters validate rather than broadly coerce them.
| Method | Result |
|---|---|
get(string $key, $default = null) |
Raw value or the default |
all(?string $key = null) |
All values or the nested array at a key |
has(string $key) |
Whether a top-level key exists |
keys() |
Top-level keys |
getString(string $key, ?string $default = null) |
String, with integers and floats converted |
getInt(string $key, ?int $default = null) |
Integer |
getFloat(string $key, ?float $default = null) |
Float, with integers widened |
getBoolean(string $key, ?bool $default = null) |
Boolean |
getEnum(string $key, string $class, ?BackedEnum $default = null) |
Backed enum case |
getDate(string $key, ?DateTimeImmutable $default = null) |
Parsed date |
count() and getIterator() |
Collection access |
A missing key returns its default. A present value with the wrong type throws
UnexpectedTypeError.
<?php
$title = $metadata->getString('title', 'Untitled');
$weight = $metadata->getInt('weight', 0);
$published = $metadata->getDate('published');getDate() parses a string only when requested. Dates remain strings during
decoding, leaving calendar semantics under application control.
getEnum() accepts a backed enum class and checks both the backing type and
the value:
<?php
enum Status: string
{
case Draft = 'draft';
case Published = 'published';
}
$status = $metadata->getEnum('status', Status::class, Status::Draft);Access is limited to top-level keys. Use all('author') to retrieve a nested
mapping; dot notation is intentionally not supported.
The original block is located by sourceOffset() and sourceLength(). The
offset is 0, or 3 after a UTF-8 byte-order mark. A zero length means the
source had no front matter.