waaseyaa / listing
Views-equivalent declarative listing pipeline for Waaseyaa entities.
Requires
- php: >=8.5
- waaseyaa/access: ^0.1.0-alpha.308
- waaseyaa/cache: ^0.1.0-alpha.308
- waaseyaa/entity: ^0.1.0-alpha.308
- waaseyaa/entity-storage: ^0.1.0-alpha.308
- waaseyaa/field: ^0.1.0-alpha.308
- waaseyaa/foundation: ^0.1.0-alpha.308
Requires (Dev)
- phpunit/phpunit: ^13.0
- waaseyaa/database-legacy: ^0.1.0-alpha.308
Suggests
None
Provides
None
Conflicts
None
Replaces
None
- dev-main / 0.1.x-dev
- v0.1.0-alpha.308
- v0.1.0-alpha.307
- v0.1.0-alpha.306
- v0.1.0-alpha.305
- v0.1.0-alpha.304
- v0.1.0-alpha.303
- v0.1.0-alpha.302
- v0.1.0-alpha.301
- v0.1.0-alpha.300
- v0.1.0-alpha.299
- v0.1.0-alpha.298
- v0.1.0-alpha.297
- v0.1.0-alpha.296
- v0.1.0-alpha.295
- v0.1.0-alpha.294
- v0.1.0-alpha.293
- v0.1.0-alpha.292
- v0.1.0-alpha.291
- v0.1.0-alpha.290
- v0.1.0-alpha.289
- v0.1.0-alpha.288
- v0.1.0-alpha.287
- v0.1.0-alpha.286
- v0.1.0-alpha.285
- v0.1.0-alpha.284
- v0.1.0-alpha.283
- v0.1.0-alpha.282
- v0.1.0-alpha.281
- v0.1.0-alpha.280
- v0.1.0-alpha.279
- v0.1.0-alpha.278
- v0.1.0-alpha.277
- v0.1.0-alpha.276
- v0.1.0-alpha.275
- v0.1.0-alpha.274
- v0.1.0-alpha.273
- v0.1.0-alpha.272
- v0.1.0-alpha.271
- v0.1.0-alpha.270
- v0.1.0-alpha.269
- v0.1.0-alpha.268
- v0.1.0-alpha.267
- v0.1.0-alpha.266
- v0.1.0-alpha.265
- v0.1.0-alpha.264
- v0.1.0-alpha.263
- v0.1.0-alpha.262
- v0.1.0-alpha.261
- v0.1.0-alpha.260
- v0.1.0-alpha.259
- v0.1.0-alpha.258
- v0.1.0-alpha.257
- v0.1.0-alpha.256
- v0.1.0-alpha.255
- v0.1.0-alpha.254
- v0.1.0-alpha.253
- v0.1.0-alpha.252
- v0.1.0-alpha.251
- v0.1.0-alpha.250
- v0.1.0-alpha.249
- v0.1.0-alpha.248
- v0.1.0-alpha.247
- v0.1.0-alpha.246
- v0.1.0-alpha.245
- v0.1.0-alpha.244
- v0.1.0-alpha.243
- v0.1.0-alpha.242
- v0.1.0-alpha.241
- v0.1.0-alpha.240
- v0.1.0-alpha.239
- v0.1.0-alpha.238
- v0.1.0-alpha.237
- v0.1.0-alpha.236
- v0.1.0-alpha.235
- v0.1.0-alpha.234
- v0.1.0-alpha.233
- v0.1.0-alpha.232
- v0.1.0-alpha.231
- v0.1.0-alpha.230
- v0.1.0-alpha.229
- v0.1.0-alpha.228
- v0.1.0-alpha.227
- v0.1.0-alpha.226
- v0.1.0-alpha.225
- v0.1.0-alpha.224
- v0.1.0-alpha.223
- v0.1.0-alpha.222
- v0.1.0-alpha.221
- v0.1.0-alpha.220
- v0.1.0-alpha.219
- v0.1.0-alpha.218
- v0.1.0-alpha.217
- v0.1.0-alpha.216
- v0.1.0-alpha.215
- v0.1.0-alpha.214
- v0.1.0-alpha.213
- v0.1.0-alpha.212
- v0.1.0-alpha.211
- v0.1.0-alpha.210
- v0.1.0-alpha.209
- v0.1.0-alpha.208
- v0.1.0-alpha.207
- v0.1.0-alpha.206
- v0.1.0-alpha.205
- v0.1.0-alpha.204
- v0.1.0-alpha.203
- v0.1.0-alpha.202
- v0.1.0-alpha.201
- v0.1.0-alpha.200
- v0.1.0-alpha.199
- v0.1.0-alpha.198
- v0.1.0-alpha.197
- v0.1.0-alpha.196
- v0.1.0-alpha.195
- v0.1.0-alpha.194
- v0.1.0-alpha.193
- v0.1.0-alpha.192
- v0.1.0-alpha.191
- v0.1.0-alpha.190
- v0.1.0-alpha.189
- v0.1.0-alpha.188
- v0.1.0-alpha.187
- v0.1.0-alpha.186
- v0.1.0-alpha.185
- v0.1.0-alpha.184
- v0.1.0-alpha.183
- v0.1.0-alpha.182
- v0.1.0-alpha.181
This package is auto-updated.
Last update: 2026-10-23 15:17:20 UTC
README
Declare access-filtered entity listings with deterministic sorting, exposed URL
filters, pagination and optional tagged caching. Application providers implement
HasListingsInterface; the listing provider discovers them through foundation's
live capability source and validates definitions after all provider boots.
$definition = new \Waaseyaa\Listing\ListingDefinition( id: 'published_articles', entityType: 'article', filters: [\Waaseyaa\Listing\Filter::eq('status', 1)], sorts: [\Waaseyaa\Listing\Sort::desc('id')], pageSize: 20, ); $values = $parser->parse($queryParams, $definition); $result = $resolver->resolve($definition, $values); foreach ($result->rows as $row) { // Application-owned presentation. }
The result exposes rows, pagination, cacheTags and cacheContexts as
readonly properties. All filters are conjunctive. Text starts/contains use
Unicode case folding and literal percent/underscore characters. Typed date
overrides remain validated scalar strings in the application's ISO storage
format. Permissive parsing keeps declared defaults after invalid input; strict
parsing raises ListingCoercionException.
Cache backends are host supplied. Result caching requires an explicit
policy-independent default-view capability on the injected gate. Ordinary
policy-dependent listings evaluate current access before pagination each time.
Eligible cache hits use canonical batched repository reads, preserve ordering,
and refresh if an identifier is missing. Repository after-commit notifications
own save/delete cache eviction. The production EntityAccessGate uses current
per-row policy checks; setting a policy constant alone does not opt it in.
Listing owns read/query policy, not entity writes, schemas, routes or rendering.
See the framework's docs/cookbook/listing-first-cut.md and
docs/specs/listing-pipeline-v1.md for composition and contracts. Source suites
do not substitute for installed split-package or generated-application proof.
Translatable identifier projections require a single effective langcode equality. Mixed-language scopes resolve fresh so translations sharing an identifier cannot be substituted during cache reconstruction.