# ADR 0002: Attribute-Based Route Declaration - Status: Accepted - Date: 2026-08-17 ## Context Routes need a home that does not grow linearly in a central composition root. ## Decision Routes are declared with method-specific PHP attributes (`Get`, `Post`, `Put`, `Patch`, `Delete`) on controller methods. A reflection-based `RouteLoader` compiles them into `RouteDef` objects. `Middleware` is a repeatable attribute valid on classes and methods. Matching precedence is deterministic: literal segments sort before `{parameter}` segments, so registration order is irrelevant. ## Consequences - Adding a route touches only the controller. - The loader must be covered by tests (reflection is where mistakes hide). - Precedence is explicit rather than dependent on registration order.