v0.18.0

25 October 2026

find() returns one type of record, and the image pipeline has its own class.

Added

  • FieldType::absentIsValue() says whether a form that does not post the field means a value. The boolean type returns true, so an unchecked box saves.
  • Dir::filesRecursive() and Arr::lastKey().

Changed

  • $app->registry()->find(), $app->find() and Page::find() add type=page when the query names no type=. type=user returns users, and any other type throws InvalidArgumentException. Before, a query without a type also matched user rows and built them as pages. See Upgrading.
  • The image pipeline moved from PageFiles to Image, reached as $app->pageFiles()->image. generateVariant() is generate(), and PageFiles::parseOptions() is Image::parseOptions().
  • Record::upload() replaces the separate copies on Page and User.

Removed

  • RecordCollection::sort(), AddonCollection, and User::root(), parent(), children() and url().
  • History::commit(). Use commitIfDirty($page) or batch($message, $fn). action(), message(), commitOwner() and resolveRevision() are private.
  • The template functions cacheKey, cacheOf and cachePut. {cache} needs no template change.

Comments

No comments yet. Be the first!

Loading form…