Ответ 1
Мне нравится думать так: пакет должен представлять определенную функцию или набор подобных функций для проекта.
Ваш первый пример - лучшее использование пакетов, чем ваш второй пример, потому что назначение каждого пакета больше определено. Хотя можно использовать один CRMBundle для всего, вы бы не воспользовались возможностью Symfony организовать свой код. Кроме того, если вы хотите перенести код вашего информационного бюллетеня на новый проект, но не весь код CRM, вам будет проще копировать рассылку NewsletterBundle и копировать по CRMBundle, а затем обрезать его.
Когда вы думаете о проекте Symfony2, иногда вы хотите забыть все, что знаете о symfony 1.x, поскольку они используют совершенно разные подходы к решению многих проблем. Например, в symfony 1 было принято создавать приложение "frontend" и "backend" для проекта, и каждое приложение, очевидно, содержит логику, специфичную для этих частей проекта. Таким образом, у вас может быть контроллер Newsletter как в интерфейсе, так и в сторонних приложениях. В Symfony2 вам лучше использовать только один комплект бюллетеней, но с двумя контроллерами (возможно, с именем "frontend" и "backend" ). Опять же, непосредственной выгодой для этого является то, как многократно используется ваш код.