devscast / symfony-hexa-skeleton
基于洋葱架构的symfony项目骨架
1.0.9
2024-07-12 20:20 UTC
Requires
- php: >=8.3
- ext-ctype: *
- ext-iconv: *
- beberlei/doctrineextensions: ^1.5.0
- cweagans/composer-patches: ^1.7.3
- devscast/symfony-hexa-bundle: ^1.0
- doctrine/doctrine-bundle: ^2.12.0
- doctrine/doctrine-migrations-bundle: ^3.3.1
- doctrine/orm: ^2.16.0
- endroid/qr-code-bundle: ^5.0.1
- erusev/parsedown: ^1.7.4
- knplabs/knp-paginator-bundle: ^6.4.0
- knpuniversity/oauth2-client-bundle: ^2.18.1
- phpdocumentor/reflection-docblock: ^5.3
- phpstan/phpdoc-parser: ^1.15
- presta/sitemap-bundle: ^4.1.1
- symfony/asset: 7.1.*
- symfony/console: 7.1.*
- symfony/doctrine-messenger: 7.1.*
- symfony/dotenv: 7.1.*
- symfony/expression-language: 7.1.*
- symfony/flex: ^2
- symfony/form: 7.1.*
- symfony/framework-bundle: 7.1.*
- symfony/http-client: 7.1.*
- symfony/intl: 7.1.*
- symfony/lock: 7.1.*
- symfony/mailer: 7.1.*
- symfony/mime: 7.1.*
- symfony/monolog-bundle: ^3.0
- symfony/notifier: 7.1.*
- symfony/process: 7.1.*
- symfony/property-access: 7.1.*
- symfony/property-info: 7.1.*
- symfony/rate-limiter: 7.1.*
- symfony/runtime: 7.1.*
- symfony/security-bundle: 7.1.*
- symfony/serializer: 7.1.*
- symfony/stimulus-bundle: ^2.18
- symfony/string: 7.1.*
- symfony/translation: 7.1.*
- symfony/twig-bundle: 7.1.*
- symfony/uid: 7.1.*
- symfony/ux-autocomplete: ^2.3
- symfony/ux-chartjs: ^2.3
- symfony/ux-dropzone: ^2.3
- symfony/ux-turbo: ^2.3
- symfony/validator: 7.1.*
- symfony/web-link: 7.1.*
- symfony/webpack-encore-bundle: ^2.1
- symfony/yaml: 7.1.*
- twig/cssinliner-extra: ^3.10.0
- twig/extra-bundle: ^3.10.0
- twig/markdown-extra: ^3.10.0
- twig/string-extra: ^3.10.0
- twig/twig: ^2.16|^3.10
- vich/uploader-bundle: ^2.4.0
Requires (Dev)
- dama/doctrine-test-bundle: ^8.2.0
- doctrine/doctrine-fixtures-bundle: ^3.6.1
- hautelook/alice-bundle: ^2.13.0
- nelmio/alice: ^3.13.6
- phpstan/phpstan: ^1.11.7
- phpstan/phpstan-doctrine: ^1.4.5
- phpstan/phpstan-phpunit: ^1.4.0
- phpstan/phpstan-symfony: ^1.4.5
- phpunit/phpunit: ^9.6.20
- rector/rector: ^1.2.0
- squizlabs/php_codesniffer: ^3.10.1
- symfony/browser-kit: *
- symfony/css-selector: *
- symfony/debug-bundle: *
- symfony/maker-bundle: ^1.60
- symfony/panther: ^2.0
- symfony/phpunit-bridge: ^7.1
- symfony/stopwatch: *
- symfony/web-profiler-bundle: *
- symplify/easy-coding-standard: ^12.3.1
- theofidry/alice-data-fixtures: ^1.7.2
Conflicts
README
这是一个洋葱(六边形)架构的symfony项目骨架,而不是传统的分层架构。我们使用以下层:
- 应用层:包含应用服务,即应用的使用案例、命令、查询及其处理程序。
- 领域层:包含领域实体、值对象、仓库(接口)和领域服务。
- 基础设施层:包含领域仓库的实现和其他基础设施服务,如邮件发送者、通知器等。
每一层都是相互独立的,依赖关系从外层注入到内层。每一层都包含一个边界上下文,这是一个相关使用案例和实体的组。
注意:这种架构灵感来源于Eric Evans所著的《领域驱动设计:在软件核心处解决复杂性》一书。这是洋葱架构的简化版本,洋葱架构是一个更通用的概念,因此并不是一个严格的实现,我们根据我们的需求和项目的需求进行了调整。
为什么选择Hexa而不是Onion?因为它更短,听起来也更酷 😎
使用方法
composer create-project devscast/symfony-hexa-skeleton my_project
已安装的包
支持使用symfony/ux-twig-component生成模板
目前,symfony/ux-twig-component
不支持{{ "<twig:component />" }}
语法。该语法用于通过bin/console hexa:make:template [index|show]
生成模板。为了让它工作,我们需要修补symfony/ux-twig-component
包。
{ "extra": { "patches": { "symfony/ux-twig-component": { "printed raw component": "./patches/ux-twig-component.patch" } }, "composer-exit-on-patch-failure": true } }
创建修补文件./patches/ux-twig-component.patch
,内容如下
--- a/vendor/symfony/ux-twig-component/src/Twig/TwigPreLexer.php 2024-02-29 18:20:59.000000000 +0200 +++ b/vendor/symfony/ux-twig-component/src/Twig/TwigPreLexer.php 2024-05-09 13:37:06.643585125 +0200 @@ -70,6 +70,17 @@ } } + if ($this->consume('{{ "')) { + $output .= '{{ "'; + $output .= $this->consumeUntil('" }}'); + $this->consume('" }}'); + $output .= '" }}'; + + if ($this->position === $this->length) { + break; + } + } + if ($this->consume('{% embed')) { $inTwigEmbed = true; $output .= '{% embed';