Я в курсе вопросов , как это , где люди , как правило , чтобы обсудить общую концепцию Symfony 2 из пучка.
Дело в том, что в конкретном приложении, таком как, например, приложение, похожее на твиттер, все ли должно быть внутри общего пакета, как говорят официальные документы ?
Причина, по которой я спрашиваю об этом, заключается в том, что, когда мы разрабатываем приложения, в общем, мы не хотим связывать наш код с какой-либо интегрированной средой полного стека.
Если я разрабатываю приложение на основе Symfony 2 и в какой-то момент я решаю, что Symfony 2 на самом деле не лучший выбор для продолжения разработки , будет ли это проблемой для меня?
Итак, общий вопрос: почему все, что нужно, - это хорошая вещь?
EDIT # 1
Почти год, с тех пор как я задал этот вопрос, я написал статью, чтобы поделиться своими знаниями по этой теме.
источник
Ответы:
Я написал более подробный и обновленный пост в блоге на эту тему: http://elnur.pro/symfony-without-bundles/
Нет, не все должно быть в связке. Вы могли бы иметь такую структуру:
src/Vendor/Model
- для моделей,src/Vendor/Controller
- для контроллеров,src/Vendor/Service
- за услуги,src/Vendor/Bundle
- для пучков, какsrc/Vendor/Bundle/AppBundle
,Таким образом, вы бы добавили
AppBundle
только то, что действительно специфично для Symfony2. Если вы решите переключиться на другой фреймворк позже, вы избавитесь отBundle
пространства имен и замените его выбранным фреймворком.Пожалуйста, обратите внимание, что я предлагаю здесь код для конкретного приложения . Для пакетов многократного использования я все же предлагаю использовать лучшие практики .
Хранение сущностей из связок
Чтобы сохранить сущности
src/Vendor/Model
вне любого пакета, я изменилdoctrine
разделconfig.yml
св
Имена сущностей - для доступа из репозиториев Doctrine - начинаются
Model
в этом случае, напримерModel:User
,.Вы можете использовать subnamespaces для связанных групп лиц вместе, например,
src/Vendor/User/Group.php
. В этом случае имя объектаModel:User\Group
.Хранение контроллеров из связок
Во-первых, вы должны указать JMSDiExtraBundle сканировать
src
папку на наличие сервисов, добавив это вconfig.yml
:Затем вы определяете контроллеры как сервисы и помещаете их в
Controller
пространство имен:Обратите внимание, что я использую свой ElnurAbstractControllerBundle для упрощения определения контроллеров как сервисов.
Последнее, что осталось, - сказать Symfony искать шаблоны без пакетов. Я делаю это, переопределяя службу guesser шаблона, но, поскольку подход отличается в Symfony 2.0 и 2.1, я предоставляю версии для них обоих.
Переопределение отгадывателя шаблонов Symfony 2.1+
Я создал пакет, который делает это для вас.
Переопределение слушателя шаблона Symfony 2.0
Сначала определите класс:
А затем скажите Symfony использовать его, добавив следующее
config.yml
:Использование шаблонов без пакетов
Теперь вы можете использовать шаблоны из пакетов. Держите их в
app/Resources/views
папке. Например, шаблоны для этих двух действий из приведенного выше примера контроллера расположены в:app/Resources/views/User/add.html.twig
app/Resources/views/User/profile.html.twig
При ссылке на шаблон просто опустите часть пакета:
источник
generate:doctrine:crud
например, ожидает, что сущность (= модель в случае Эльнура) будет в связке для работы.Конечно, вы можете отделить ваше приложение. Просто разработайте его как библиотеку и интегрируйте в
vendor/
папку symfony (либо с помощью,deps
либоcomposer.json
, в зависимости от того, используете ли вы Symfony2.0 или Symfony2.1). Тем не менее, вам нужен по крайней мере один пакет, который действует как «внешний интерфейс» вашей библиотеки, где Symfony2 находит контроллер (и тому подобное).источник
symfony-2.0
я предполагаю, что вы используете текущую версию 2.0. В этом случае создайте git-репозиторий там, где вам нравится, и поместите в него все, что вы хотите разрабатывать независимо от Symfony. В вашем проекте symfony-update обновите вашdeps
-file, как упомянуто здесь: symfony.com/doc/current/cookbook/workflow/… Затем просто создайте один (или несколько) набор (-ов) приложения (-овphp app/console generate:bundle
) для специфических для symfony вещей.Обычный дистрибутив Symfony может работать без каких-либо дополнительных (прикладных) пакетов, в зависимости от того, сколько функций вы хотите использовать в полной структуре стека.
Например, ваши контроллеры могут быть любыми вызываемыми, которые можно поместить в любое место в структуре вашего проекта, как только они будут автоматически загружены.
В файле определения маршрутизации вы можете использовать:
Это может быть любой простой старый объект php, связанный с фреймворком только тем, что он должен возвращать
Symfony\Component\HttpFoundation\Response
объект.Ваши шаблоны веток (или другие) могут быть помещены как
app/Resources/views/template.html.twig
и могут быть обработаны, используя::template.html.twig
логическое имя.Все DI-сервисы могут быть определены в app / config / config.yml (или импортированы,
app/config/services.yml
например, из них , и все классы сервисов также могут быть любыми простыми старыми объектами php. Не привязаны к фреймворку вообще.Все это предоставляется по умолчанию средой полного стека Symfony.
У вас будут проблемы, когда вы захотите использовать файлы перевода (например, xliff), потому что они обнаруживаются только через пакеты .
Распределение symfony-light направлено на решение подобных проблем путем обнаружения всего, что обычно обнаруживается только через связки.
источник
Вы можете использовать KnpRadBundle , который пытается упростить структуру проекта.
Другой подход заключается в использовании,
src/Company/Bundle/FrontendBundle
например, для пакетов иsrc/Company/Stuff/Class.php
для классов, которые не зависят от Symfony и которые могут быть повторно использованы вне рамок.источник
Bundle
напрямую связана с публичным обменом. Когда я пишу какое-то приложение, я не хочу делиться своим кодом, за исключением тех частей, которые я намеренно создал как модули, управляемые сообществом. Я ошибся?Поскольку прошло уже 5 лет, вот еще несколько статей о Symfony Bundles.
TLDR:
TLDR:
источник
Среда Symfony очень хороша для быстрого запуска проверки концепции, и весь код может быть введен в стандартное пакетное приложение в src /.
В этом комплекте вы можете структурировать свой код так, как хотите.
Если вы хотите использовать другую технологию для разработки вашего POC, вы можете легко перевести это, потому что вы не структурируете весь свой код в концепции пакета.
Для всей концепции вы не экстремизировали это. Связка это хорошо, но связка все и каждый день не хорошо.
Возможно, вы можете использовать Silex (микро-фреймворк Symfony) для разработки своего Proof of Concept для уменьшения влияния стороннего пакета.
источник