Interface LaravelUi5\Sdk\Shell\CmdK\Contracts\CollectorInterface

Defines a database-backed CmdK collector.


Architectural Role

A Collector is responsible for domain-specific discovery.

It builds the maximum candidate set of searchable entities and materializes them into CmdK Action DTOs.

It MUST:

  • Build a relational base query (Eloquent Builder).
  • Contain domain-specific discovery logic.
  • Materialize results into Action DTOs.

It MUST NOT:

  • Apply visibility or authorization constraints.
  • Access security tables directly.
  • Perform ability or role resolution.
  • Materialize results before constraints are applied.

Visibility is applied exclusively via paired VisibilityConstrainer implementations in the search pipeline.


Two-Phase Lifecycle

query() → discovery (what could be shown) constrain → visibility filtering (external) collect() → materialization (what will be shown)

The Collector is intentionally split into query-building and materialization to guarantee that:

  • Security operates at query level.
    • No O(n) authorization filtering happens in PHP.
    • Results are only materialized once fully constrained.

Layering Rules

CmdK Layer:

  • Collector (this interface)
  • VisibilityConstrainer (adapter)
  • SearchService

Security Layer:

  • VisibilityResolvers
  • AbilityResolvers
  • Grant resolution

Collectors MUST remain unaware of Security internals.

Methods