Быстрый вопрос: где я должен помещать код, который имеет схожие характеристики с классом Service Utilities Service, как описано здесь в этом сообщении блога Benjamin Eberlei ( http://www.whitewashing.de/2013/06/27/extending_symfony2__controller_utilities.html ) ?
В промежутке времени я разместил его внутри: src / ProjectName / Library
контекст
Я отметил следующее:
Я нашел ответы на вопросы, похожие по теме, но не совсем то, что я был после
Основываясь на моих исследованиях здесь, только на SO, этот вопрос, похоже, несколько дошел до смерти, но я думаю, что вопросы задавали ранее юбки вокруг того, что я на самом деле после. Несмотря на это, похоже, у меня есть следующие варианты:
Вопрос, опять же, для краткости: где я помещаю классы, которые предоставляют универсальную глобальную функцию в Symfony 2?
Я очень благодарен.
Эта документация о репозиториях композиторов является отличной ссылкой, и документация о пакетах, которые не поддерживают Composer, должна быть тем, что вы ищете.
Также я хотел бы отметить документацию о VCS, которая часто используется, когда вам нужно разблокировать Bundle и переопределить оригинал (я использовал его довольно много раз).
Вы можете сделать следующее – это не потребует, чтобы у вас была система упаковки или что-то еще. Вам просто нужно поставить пакет как zip, доступный на вашем компьютере, используя URL-адрес.
{ "repositories": [ { "type": "package", "package": { "name": "my/package", "version": "1.0.0", "dist": { "url": "https://github.com/my/package/archive/master.zip", "type": "zip" }, "autoload": { "psr-0": { "My\\Package\\": "src/" } } } } ], "require": { "my/package": "1.0.0" } }
Если ваш пакет не поддерживает PSR-0, вам нужно использовать опцию «classmap», иначе ваш пакет поддерживает PSR-0, вам нужно использовать параметр psr-0 .
После некоторого беспорядка, в то время как принятый ответ здесь имеет свои достоинства, я решил создать пакет «Core», в который будут включены все мои проекты, связанные с перекрестными связями / приложениями, с широкими зависимостями и ресурсами.
Это позволит мне иметь центральное место для всех активов, связанных объектов и кода конкретной библиотеки проекта.
Позиционируется для рефакторинга
Я внутренне рассуждал с самим собой, что это счастливое промежуточное решение (возможно временное), которое позволяет мне продолжить развитие, а не состояние анализа паралича, в котором я сейчас живу.
Делая так, я могу иметь точки гибкости для рефакторинга позже в решении каталога поставщика.
Если вы работаете над проектом и раздражены неестественным ощущением того, что ваши сущности и код библиотеки разбросаны по разным путям, как я был, это будет хорошим решением.
Он не изменяет поведение по умолчанию для SF2 и Doctrine 2
Ранее я внедрил модификацию конфигурации Symfony 2 Doctrine 2, которая позволила мне (по праву) удалить Entities из пакета и в отдельное центральное пространство имен.
Мне понравилась эта идея. Я использовал его некоторое время. Предостережение с этим подходом заключается в том, что у вас больше нет возможности использовать интерфейс командной строки, когда вам нужно быстро создать объект Doctrine в качестве пространства имен Bundle.
Я думал, что все в порядке, потому что мне все равно нужно что-то менять, но потом я подумал:
На полпути, написав еще один вопрос «где поставить вопрос XXXX в Symfony 2» (я уверен, что те люди, которые следуют за тегами PHP и Symfony2, устали видеть), я остановился и поместил его в комплект, который у меня есть и переименовал его в пакет Core.
Core Bundle Таким образом, он находится в комплекте в соответствии с требованием CLI, его намного легче отслеживать, и я могу семантически делиться содержимым этого пакета, поскольку он содержит основной код, специфичный для приложения:
Самое главное, когда я получаю время, чтобы на самом деле сесть и работать с композитором и др., Я могу реорганизовать это легко, потому что все это существует в одном месте.
Так. В двух словах. Чтобы ответить на мой собственный вопрос: где я должен разместить общий код библиотеки в Symfony 2?
Я бы поместил его в пакет, созданный специально для хранения активов, ресурсов и библиотечного кода, который должен быть доступен для нескольких пакетов, используя следующие рекомендации:
Пакет и установка через композитор
Проводите ли ваши исследования по форматированию вашей файловой структуры, чтобы быть совместимым с PSR-0, тогда, когда вы начнете использовать композитор:
Приложение / Проект – Связки, которые создают приложение, но полагаются на Core Bundle.
Core Bundle – расширяет SF2 в ключевых точках, содержит общие ресурсы и библиотечный код. Поскольку я не изменил способ работы фреймворка, файлы находятся там, где их ожидает SF2. Это означает, что я все еще могу использовать его генераторы для Entities.
У меня не будет проблем с создаваемыми здесь экранами / CRUD-экранами, поскольку они будут рассматриваться как прототипы, а не реальные функции приложения.
SF2-слой. – остается неизменным, нетронутым. Extended.