Правильно понимаю, у вас структура аналогичная тому, что я привел? Т.е. внутри монорепозитория, непосредственно в директорииsrc классы не по PSR (присутствует что-то вроде framework-bundle/src/?
вы забываете про монорепозиторий. Само собой такое разделение на тесты и код лучше, но в монорепе оно не будет работать.
Скоро не будут :)Removed support for bundle:controller:action syntax to reference controllers.
С появлением_instanceofи!taggedCompilerPassуже и не нужны. Я ими давно не пользовался, по крайней мере.
CompilerPass, особенно в публичных бандлах где нужна обратная совместимость. Согласен с вами, наверное можно отказаться от бандлов в проекте.
Какие нюансы?
Я буду больше работать по паттерну CQRS.
В защиту скажу, что c использованием монорепозитория по-другому не получится (ну или как минимум, у монорепы будет хитрувыдоманный автолоад, вместо лаконичного).
{
"autoload": {
"psr-4": {
"Sylius\\": "src/",
}
},
"autoload-dev": {
"psr-4": {
"Sylius\\Tests\\": "tests/"
}
}
}
С появлением autowiring все бандлы заменяются, грубо говоря, одной строчкой
src у вас не только сервисы и регистрировать все подряд в контейнере неправильно. Есть конечно exclude:, но он не буде работать если делать иерархию модулей. Лучше в каждом модуле добавить свой конфиг:services:
_defaults:
autowire: true
autoconfigure: true
public: false
App\Blog\:
resource: '../../../*'
exclude: '../../../{DependencyInjection,Entity}'Kernel:class Kernel extends BaseKernel
{
private const CONFIG_EXTS = '.{php,xml,yaml,yml}';
protected function configureContainer(ContainerBuilder $container, LoaderInterface $loader)
{
// ...
// load configs from modules
$loader->load($src_dir.'/*/Resources/config/*'.self::CONFIG_EXTS, 'glob');
}
}{# @controller AppBlogBundle:Home:index #}
{# @controller AppBundle:Blog/Controller/Home:index #}
Теперь понял, что такое бандл окончательно. Это получается как адаптер под какой-то фреймворк, необязательно симфони.
Это очень важный комментарий) У меня тоже возникал этот вопрос и это правда лишний гемор. Об этом я долго думал. Было решение на эту тему сначала клонировать в проект репозиторий в какую-то папку, например, пакеты. Уже от туда к фреймфорку подключать как локальный репозиторий.
Теперь окончательно понял, что это нужно делать именно так. Можете ли скинуть пару ссылок на подобную архитектуру из открытого проекта, если у вас такой есть. Или же пример чужого проекта. Есть небольшие вопросу по этому. Если с контроллерами, сущностями, сервисами всё понятно, то как работать с ресурсами, видами (шаблонизаторами), переводами. их тоже нужно хранить вsrc/Eventsили же они будут общими для всего приложения? Было бы не плохо всё таки ссылочку) Хочется начать проект качественно сразу. А пока не очень представляю архитектуру таких сервисов
BoShurik скидывал ссылку на Sylius . Это то, о чём вы говорите или нет?
LICENSE, composer.json, phpspec.yml.dist, phpunit.xml.dist и т.д./src/
/tests/src содержит исходный код компонента, модуля и т.д., а папка tests содержит тесты этого компонента. Я не считаю правильным смешивать исходный код и тесты. Тоже касается модулей. К тому же это может затруднить запуск тестирования всего проекта если тесты зарыты куда-то глубоко. Я предпочитаю продублировать структуру папок со списком всех модулей из корневой папки проекта src в такую же корневую попку проекта tests. То есть, получается так:src/Blog/Entity
src/Blog/Services
src/Events/Entity
src/Events/Services
tests/Blog/Entity
tests/Blog/Services
tests/Events/Entity
tests/Events/Servicessrc/Blog/Resources/templates.templates. Я рекомендую вынести шаблоны и организовать их по модулям, примерно в следующую структуру:templates/Blog/index.html.twig
templates/Blog/layout.html.twig
templates/Events/index.html.twig
templates/Events/layout.html.twig
templates/base.html.twig
templates/index.html.twig
templates/layout.html.twigsrc/Blog/Resources/translations/messages.ru.yml.messages.ru.yml я не советую. Лучше добавить для переводов translation domain по названию модуля и получить Blog.ru.yml и Events.ru.yml.autowire и autoconfigure с путями к сервисам в конкретном модуле. Там пропишете псевдонимы сервисов модуля и проставите теги сервсиам модуля. Я не советую регистрировать сервисы модуля в глобальном конфиге /config/services.yml.src/Blog/Controller/
src/Blog/Entity/
src/Blog/Services/
src/Blog/Resources/config/doctrine.yml
src/Blog/Resources/config/services.yml
src/Blog/Resources/translations/messages.ru.yml
src/Events/Controller/
src/Events/Entity/
src/Events/Services/
src/Events/Resources/config/doctrine.yml
src/Events/Resources/config/services.yml
src/Events/Resources/translations/messages.ru.yml
tests/Blog/Entity/
tests/Blog/Services/
tests/Events/Entity/
tests/Events/Services/
templates/Blog/index.html.twig
templates/Blog/layout.html.twig
templates/Events/index.html.twig
templates/Events/layout.html.twig
templates/base.html.twig
templates/index.html.twig
templates/layout.html.twig
App/Blog/Controller
App/Blog/Entity
App/Events/Controller
App/Events/EntityApp/Blog/AppBlogBundle
App/Events/AppEventsBundle
И правильно. Спамеры под тором отправляются в бан, а с ними и те кто пользуются тором ибо нефиг.
С этим тоже можно бороться.
Вообще, лучший способ спрятаться, это не прятаться за Tor, noscropt и doNotTrack, а наоборот, использовать наиболее популярное устройство с наиболее популярным браузером. Тот же iPhone.