v0.19.0

26 October 2026

Field types are stateless and field rendering moves to templates beside each field and type, with built-in render templates and five new reusable fields.

Added

  • F::send() sends a file as the response.
  • Built-in fields title, body, summary, cover and published_at, each with a render template.
  • render.latte for the markdown, code, image, file, url, email, datetime, list, checkboxes, pages, relation, object, repeater, blocks and stack field types.

Changed

  • FieldType is stateless, built once per class as new $class($app). encode(FieldValue $field, mixed $raw), decode(FieldValue $field), validate(FieldValue $field, mixed $raw), empty(FieldValue $field), preview(FieldValue $field), indexValues(FieldValue $field), indexChildren(FieldValue $field), indexText(FieldValue $field) and child(FieldValue $field, string $key) read the value from $field; FieldType::create() is gone. See Upgrading.
  • A field's render template is fields/{name}/render.latte beside its definition, and a type's is fieldtypes/{type}/render.latte, replacing site/views/fields/{name}.latte and site/views/fields/{type}.latte. site/views/fields/{view}/{name}.latte still wins first. See Upgrading.
  • Dt::parse() accepts an int Unix timestamp.
  • LatteExtension holds the app readonly.
  • {partial} and {fragment} share their wrapper through WrapsPartial.

Removed

  • FieldType::__get(). A container's sub-fields are read through child(FieldValue $field, string $key).

Comments

No comments yet. Be the first!

Loading form…