После некоторого возиться, в то время как принятый ответ здесь имеет смысл, я решил создать пакет «Core», в который будут включены все мои проекты, связанные с перекрестными связями/приложениями, с широкими зависимостями и ресурсами.
Это позволит мне иметь центральное место для всех активов, связанных объектов и кода конкретной библиотеки проекта.
Позиционируется для рефакторинга
Я внутренне мотивированный с собой, что это счастливый середина (возможно, временное) решение, которое позволяет мне, чтобы попасть на развитие, а не состояние паралича анализа, что я» м в настоящее время.
Выполнение подобных действий, я могу иметь гибкие точки для рефакторинга позже в решении каталога поставщика.
Если вы работаете над проектом и раздражены неестественным ощущением наличия у вас сущностей и кода библиотеки, разбросанных по разным пучкам, как я был, это будет хорошим решением.
Он не изменяет поведение по умолчанию SF2 и доктриной 2
Я ранее реализовал модификацию Symfony 2 Доктрина конфигурации 2, что позволило мне (по праву) удалить объекты из пучка и в отдельное центральное пространство имен.
Мне понравилась эта идея. Я использовал его некоторое время. Предостережение с этим подходом заключается в том, что у вас больше нет возможности использовать интерфейс командной строки, когда вам нужно быстро создать объект Doctrine в качестве пространства имен Bundle.
Я думал, что это было хорошо, потому что мне нужно, чтобы изменить положение вещей вокруг так или иначе, но потом я подумал:
- «Как о форме объектов, где нужно поместить те в отдельный каталог в/ЦСИ как? Объект является
- Как насчет уровня службы (не DI, но реальная служба Layer - где логика приложения живет)? «
на полпути через написание еще один», где бы я поставил XXXX в Symfony 2 "типа (который, я уверен, те люди, которые следуют за PHP и S Теги ymfony2 устали видеть), я остановился и поместил его в пакет, который я назвал пакетом активов, и переименовал его в пакет Core.
Ядра Bundle Таким образом, это в связке согласно требованию консоли, это намного легче следовать, и я могу семантический разделить содержимое этого расслоения, поскольку он содержит код ядра, специфичный для приложения:
- Организации.
- Общие формы.
- Общий ресурс HTML, CSS и JavaScript.
- Проект специфический код библиотеки.
- Мои Twig расширения также живут здесь.
- И, наконец, сюда также входят классы Service Layer и связанные с ними заводы.
- Если у меня есть другие расширения, которые я хочу сделать для Symfony для этого проекта, я добавлю их здесь.
Самое главное, когда я получаю время, чтобы на самом деле сесть и работать с композитором и др., Я могу реорганизовать это легко, потому что все это существует в одном месте.
So. В двух словах. Чтобы ответить на мой вопрос: Где я могу разместить общий код библиотеки в Symfony 2?
Я бы поставил его в узелок, созданный специально для хранения активов, ресурсов и библиотечный код, который должен быть доступен для нескольких пучков, используя следующие рекомендации:
- Создание основного пучка.
- Введите здесь общий код библиотеки.
- Поместите здесь все объекты.
- Введите общие активы (main.css, reset.css и т. Д.) Здесь.
- Поместите здесь общие формы.
- Поместите здесь все классы уровня обслуживания.
пакет и установить с помощью композитора
Сделайте свое исследование о том, как отформатировать файловую структуру, чтобы быть PSR-0 работает согласно тогда, когда вы начать использовать композитора:
- Отформатируйте его как совместимые с PSR-0
- Упакуйте его в zip-файл и установите его через композитор (согласно инструкциям по настройке @Thomas Potaires)
Применение/Проект - Связки, которые строят приложения, но опирающиеся на ядре Bundle.
Ядро Bundle - Расширяет SF2 в ключевых точках, содержит общие ресурсы и библиотечный код. Поскольку я не изменил способ работы фреймворка, файлы находятся там, где их ожидает SF2. Это означает, что я все еще могу использовать его генераторы для Entities.
У меня не будет проблем с созданием экранов лесов/CRUD, поскольку они будут рассматриваться как прототипы, а не реальные функции приложения.
SF2 Layer. - остается неизменным, нетронутым. Extended.
По глобальной функциональности вы имеете в виду глобальную функциональность проекта или глобальную функциональность Symfony2? – Dandy
(На самом деле это отличный вопрос). Быстрый намек, вы сможете сделать это исключительно с композитором. В принципе, вы можете зарегистрировать пакеты, совместимые с PSR-0, сопоставить их с пространством имен и должны быть установлены в папке поставщика (иерархия путей не имеет значения, это зависит от вас, вы можете использовать другие библиотеки в качестве примера) , –
@ Dan - глобальная функциональность, я имею в виду функциональность, которая будет доступна из глобальной/прикладной области, чтобы она была доступна для всех пакетов. – rvdavid