• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

GollumSF / rest-bundle / 33212588282
100%
master: 100%

Build:
Build:
LAST BUILD BRANCH: v4.2.1
DEFAULT BRANCH: master
Ran 28 Aug 2026 09:28PM UTC
Jobs 1
Files 68
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

28 Aug 2026 09:23PM UTC coverage: 100.0%. Remained the same
33212588282

push

github

Smeagolworms4
Sortable collections: several keys, joins, whitelist and custom sorters

The `order` query parameter now takes several comma separated keys, each optionally
suffixed by its own direction, and dots cross relations:

    ?order=author:desc,title
    ?order=author.country.name:asc

The joins this needs are generated after the count query; two keys pointing at the
same relation share one join, and a relation already joined by the query callback is
reused.

#[ApiSortable] declares what a collection may be ordered by, on an entity property, on
the entity class, or on the controller action which may narrow the catalogue of the
entity. An entity declaring none keeps the historical permissive behaviour, so nothing
changes for an existing API. Declaring one turns the whitelist on and any other key is
answered with a 400.

Orderings no property path can express go through an ApiSorterInterface service,
referenced by class name from #[ApiSortable(sorter: ...)].

Resolution itself is a service, ApiOrderResolver, walking handlers tagged
gollumsf.rest.sort_resolver.handler by descending priority, so an application can own
keys of its own.

The `direction` query parameter still applies to the keys carrying no suffix but is
deprecated, and so is ApiFinderRepositoryInterface::apiFindBy() in favour of
ApiFinderOrderRepositoryInterface::apiFindByOrder(). A repository implementing the old
method by hand keeps working and receives the first key.

Also restores the exception handler the test kernel leaves behind, without touching the
error handler, which is what PHPUnit was reporting as risky.

279 of 279 new or added lines in 17 files covered. (100.0%)

834 of 834 relevant lines covered (100.0%)

22.44 hits per line

Jobs
ID Job ID Ran Files Coverage
1 33212588282.1 28 Aug 2026 09:28PM UTC 68
100.0
GitHub Action Run
Source Files on build 33212588282
  • Tree
  • List 68
  • Changed 4
  • Source Changed 0
  • Coverage Changed 4
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • af5e51cf on github
  • Prev Build on v4.0.0 (#33207689206)
  • Next Build on v5.0.0 (#33212588335)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc