devscast/symfony-hexa-skeleton

基于洋葱架构的symfony项目骨架

1.0.9 2024-07-12 20:20 UTC

This package is auto-updated.

Last update: 2024-09-12 20:44:37 UTC


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';