应用结构

一个完整的swoft应用可以包含:

  • console 应用
  • http 服务(跟传统的框架差不多)
  • websocket 服务
  • rpc 服务

swoft-cloud/swoft 即是一个完整应用的demo。当然,如果你只想使用一部分功能也是可以的

应用骨架

app 下的类目录为了避免一些文件夹名称没有复数单词,导致命名不统一,所有的文件夹名称 统一使用单数

  1. ├── app/ ------ 应用代码目录
  2. ├── Annotation/ ------- 定义注解相关
  3. ├── Aspect/ ------- AOP 切面
  4. ├── Bean/ ------- 一些具有独立功能的class bean
  5. ├── Console/ ------ 命令行代码目录
  6. ├── Command/
  7. ├── Exception/ ------ 定义异常类目录
  8. └── Handler/ ------ 定义异常处理类目录
  9. ├── Http/ ------ HTTP 代码目录
  10. ├── Controller/
  11. └── Middleware/
  12. ├── Helper/
  13. └── Functions.php
  14. ├── Listener/ ------ 事件监听器目录
  15. ├── Model/ ------ 模型、逻辑等代码目录(这些层并不限定,根据需要使用)
  16. ├── Dao/
  17. ├── Data/
  18. ├── Logic/
  19. └── Entity/
  20. ├── Rpc/ ------ RPC 代码目录
  21. └── Service/
  22. └── Middleware/
  23. ├── WebSocket/ ------ WebSocket 代码目录
  24. ├── Chat/
  25. ├── Middleware/
  26. └── ChatModule.php
  27. ├── Application.php -------- 应用类文件继承自swoft核心
  28. ├── AutoLoader.php -------- 项目扫描等信息(应用本身也算是一个组件)
  29. └── bean.php
  30. ├── bin/
  31. ├── bootstrap.php
  32. └── swoft ------ swoft 入口文件
  33. ├── config/ ------ 应用配置目录
  34. ├── base.php --- 基础配置
  35. └── db.php
  36. ├── public/ ------ WEB可访问目录
  37. ├── resource/ ------ 应用相关资源目录
  38. ├── language/ ------ 语言资源目录
  39. └── view/ ------ 视图资源目录
  40. ├── runtime/ ------ 临时文件目录(日志、上传文件、文件缓存等)
  41. ├── test/ ------ 单元测试代码目录
  42. └── bootstrap.php
  43. ├── composer.json
  44. ├── composer.lock
  45. ├── phar.build.inc
  46. └── phpunit.xml.dist

render by tree -L 2 -F --dirsfirst

组件骨架结构

  1. ├── src/
  2. ├── Annotation/ -------- 组件注解类定义
  3. ├── Bean/ ------- 一些具有独立功能的 class bean
  4. ├── Concern/ ------- traits classes
  5. ├── Contract/ ------- interface classes
  6. ├── Exception/
  7. ├── Helper/
  8. ├── Listener/
  9. ├── AutoLoader.php -------- 组件扫描等信息
  10. ├── test/ ------ 单元测试代码目录
  11. ├── unit/
  12. ├── testing/
  13. └── bootstrap.php
  14. ├── LICENSE
  15. ├── README.md
  16. ├── composer.json
  17. └── phpunit.xml

src/AutoLoader.php 是一个组件必须存在的文件,swoft依据它来确定要扫描那些目录