У Symfony framework интересная системанаследования бандлов (bundle). Интересная она тем, что действует как ООП наследование с точностью до наоборот. При наследовании бандла модификации задевают родительский. Это очень удобно: если вам не понравился какой-то компонент, или вы хотите его расширить/заменить реализации - можно использовать механизм наследования бандлов, не изменяя при этом родительский бандл, но при использовании родительского бандла как раз будет использоваться новый функционал.
Рассмотрим механизм наследования бандлов:
Для этого достаточно создать бандл, переопределив в главном файле метод getParent():
<?php public function getParent() { return 'FOSUserBundle'; } ?>
В этом примере мы унаследовали FOSUserBundle.
Теперь для того, чтобы переопределить любой файл родителя, достаточно просто создать его "вариант" в дочернем бандле, просто повторив файловую структуру (путь, имя).
Чаще всего механизм наследования бандлов используют для переопределения twig-шаблонов, но никто не мешает так же расширять логику бандла.
В тривиальных случаях, когда нужно переопределить 1-2 twig файла, можно не выделять отдельный бандл, а просто повторить положить в app/resources, опять же, повторив файловую структуру. Такой подход будет оправдан, например, для кастомизации страниц ошибок (404, 500, etc), но вряд это ли приемлемо для специфичных шаблонов.
Наследования бандлов удобно комбинировать из обычным ООП-наследованием. (В случае переопределения контроллеров, логики, etc).
Источник на оригинал: http://folkprog.net/nasledovanie-bandlov/