Смотри есть библиотеки роутеров, которые из себя представляют только матчер, без какой либо логики, что с матчем делать и без какой либо обратной генерации (они тоже называеются роутерами). Моя реализация, которая в многом также основана на том, что было раньше, представляет следующее:
1, Есть матчер для матчинга.
2, Есть генератор для генерации
3, Есть роутер, который и матчинг делает и генерацию сможет делать (через делегацию все), а также для сматченного маршрута может pipeline execution сделать, через диспетчер под катом (который можно свой по желанию прикрутить). Он также является и RequestHandlerInterface, чтоб проще юзать его вне Yii, как отдальный пакет. Он как бы является одной входной точкой. В самом Yii мы будем юзать RouterMiddleware, который будет делать матчинг через матчер и через диспетчер pipeline execution (в пакете диспетчер по умолчанию). Для yii-web можно подкрутить любой другой диспетчер при надобности, все там под контрактом.
Так вот, я бы все таки хотел иметь отельный матчер, во первых для пакета самого, чтоб если кому надо только матчинг, он бы не брал весь Router объект (который как я сказал одна входная точка, что очень удобно в плане пакета), во вторых матчер хз отдельно еще где понадобиться.
Я пока конечно матчер сделал без всякого стейта и зависимостей, но это не совсем то, как я его представляю. Надо думать еще...