# Errors

HTML: [altophp.com/frontmatter/errors](https://altophp.com/frontmatter/errors/)

Every package exception implements
`Alto\FrontMatter\Exception\FrontMatterExceptionInterface`, allowing one catch
for decoding, access, and rendering failures.

```php
use Alto\FrontMatter\Exception\FrontMatterExceptionInterface;
use Alto\FrontMatter\FrontMatter;

try {
    $metadata = FrontMatter::fromString($document);
} catch (FrontMatterExceptionInterface $error) {
    // Report or reject invalid front matter.
}
```

| Exception | Meaning |
| --- | --- |
| `SyntaxError` | The YAML subset grammar was violated |
| `UnexpectedTypeError` | A typed accessor received the wrong value type |
| `UnsupportedSyntaxError` | A detected block uses unsupported syntax, currently TOML input |
| `RenderError` | A value cannot be represented in the requested format |

`SyntaxError::line()` and `column()` are one-based source coordinates inside
the raw front matter block:

```php
use Alto\FrontMatter\Exception\SyntaxError;

try {
    FrontMatter::fromString("---\ntitle: [unterminated\n---\n");
} catch (SyntaxError $error) {
    printf('%d:%d %s', $error->line(), $error->column(), $error->getMessage());
}
```

`fromFile()` throws `RuntimeException` when its path cannot be read. That error
is outside the package exception interface because it is an I/O failure rather
than a front matter failure.

---

Previous: [Integration](https://altophp.com/frontmatter/integration.md)

---

ALTO\FRONT MATTER: [altophp.com/frontmatter](https://altophp.com/frontmatter/)
ALTO(PHP): [altophp.com](https://altophp.com/)
