Context: phalcon/debugbar can only be booted and injected against a Phalcon\Mvc\Application, and its collectors gather data by subscribing to MVC event names. That makes the bar unusable in an ADR app (Phalcon\ADR), which was discovered while wiring phalcon/vokuro-adr (the bar is a dependency there but entirely unused). The goal is to make the bar work on ADR - and, by construction, on any framework - without forcing Phalcon\Di\DiInterface back into the ADR delivery ring. Motivation: ADR is a strong pattern for HTML apps, not only JSON, and the debug bar should not be MVC-only.
Events-manager strategy #15
The root coupling is that collectors know framework event names. Break it with three layers:
- A canonical debug-bar signal set the bar owns — a small, stable vocabulary (
query, view.rendered, route.matched, request.received, response.sending). Collectors subscribe only to these.
- A per-framework bridge that maps native signals to canonical ones — MVC listens to
db:afterQuery / view:* / router:matchedRoute; ADR listens to PIPELINE_* / APPLICATION_* or instruments directly.
- A direct push API on collectors for hosts with no events manager — the bridge pushes.
The events manager then becomes an implementation detail of the active bridge, not a hard dependency of the collectors.
Context:
phalcon/debugbarcan only be booted and injected against aPhalcon\Mvc\Application, and its collectors gather data by subscribing to MVC event names. That makes the bar unusable in an ADR app (Phalcon\ADR), which was discovered while wiringphalcon/vokuro-adr(the bar is a dependency there but entirely unused). The goal is to make the bar work on ADR - and, by construction, on any framework - without forcingPhalcon\Di\DiInterfaceback into the ADR delivery ring. Motivation: ADR is a strong pattern for HTML apps, not only JSON, and the debug bar should not be MVC-only.Events-manager strategy #15
The root coupling is that collectors know framework event names. Break it with three layers:
query,view.rendered,route.matched,request.received,response.sending). Collectors subscribe only to these.db:afterQuery/view:*/router:matchedRoute; ADR listens toPIPELINE_*/APPLICATION_*or instruments directly.The events manager then becomes an implementation detail of the active bridge, not a hard dependency of the collectors.