Я много пишу PHP кода и часто слышу, что Symfony, это прямо right-way в разработке, что там нет связанности и так далее.
Если это так, то почему в ControllerTrait (который используется в AbstractController) есть метод getDoctrine()? Хм, неужели доктрина прибита гвоздями к фреймворку?
А чем UserRepository::findById(100) хуже чем:
$this->entityManager->getRepository(User::class)->findOneBy(['id' => 100]);
Во втором случае все кишки торчат наружу и это дело дополнительно придется оборачивать в какой-нибудь репозиторий, чтобы этого не было видно.
Далее. Все Entity прибиты к Doctrine через аннотации. Подход ничем не лучше AR из того же Yii2 или Laravel. Захочешь перенести модель в другой фреймворк - замучаешься вычищать код. Что делать? Добавлять еще одну абстракцию!
Symfony security завязан на Doctrine.
Вот такое наблюдение от разработки проекта на Symfony.
В итоге у меня в проекте есть дополнительный слой абстракции над Doctrine, чтобы к ней не привязываться лишний раз.