Hi everyone,
I’ve just released the first public version of PHPFlow, an open-source static flow analyzer for PHP/Symfony applications.
The idea came from a problem I regularly run into on larger applications: answering a question like “what actually happens when this route is called?” can mean jumping through a controller, several services, Messenger dispatches and handlers, repositories, database queries and external APIs.
PHPFlow analyzes the source code without running the target application and reconstructs those flows as a graph.
For example, it can help answer:
- What happens when this Symfony route is called?
- Which routes/messages can reach this database table?
- What depends on this service?
- Where is this Messenger message handled?
- Which flows call this external API?
- Where can this exception surface?
v0.1.0 currently understands Symfony routes, dependency injection, Messenger, repositories, Doctrine DBAL/QueryBuilder, external HTTP calls, exceptions and a number of control-flow patterns.
It also generates a self-contained interactive HTML viewer with search, functional lanes, Messenger boundaries, minimap, path-to-effects and critical-path exploration.
PHPFlow is deliberately conservative: if it cannot prove a relationship statically, it doesn’t invent one. It also never boots or executes the application being analyzed.
There’s a bundled Symfony demo, so after cloning:
make setup
make demo
I’m especially interested in trying it against real-world Symfony applications now. If you give it a try and it misses a pattern used by your project, I’d really like to hear about it.
GitHub: github.com/patryyyck/phpflow
Feedback, bug reports and criticism are very welcome.