应用结构

Dux 应用是一种将PHP程序划分为多个独立的、可重用的模块的开发方式,可以将整个项目划分为多个小模块,每个模块都包含独立的功能和接口。这种方式可以提高代码的可维护性和可扩展性,让项目更加灵活、易于维护和扩展。

应用目录 (后端)

每个应用模块都是一个独立的目录,每个应用目录中包含以下文件,更多详细说明请参考应用开发。

└─ app  # 应用程序的根目录,包含所有应用程序的文件和子目录。
   ├─ example                   # <- 应用模块 (示例)
   |  ├─ Admin               # <- 后台接口相关目录
   |  ├─ Api                 # <- Api 接口相关目录
   |  ├─ Middleware          # <- 模块中间件相关目录
   |  ├─ Config              # <- 模块的配置文件目录
   |  ├─ Models              # <- 模块模型相关代码目录
   |  ├─ Langs               # <- 模块语言包目录
   |  ├─ Docs                # <- 模块说明文档目录
   |  └─ App.php             # <- 模块的入口文件

应用目录 (前端)

每个后端应用模块应该对应前端页面目录,每个前端页面模块中包含以下文件,更多详细说明请参考应用开发。

└─ web  # 后台前端目录
   ├─ pages  # 前端页面的根目录,包含所有应用程序的文件和子目录。
   |  ├─ example           # <- 应用模块 (示例)
   |  |  ├─ admin       # <- 后台前端页面目录
   |  |  ├─ components  # <- 模块公用组件目录
   |  |  ├─ config      # <- 配置文件目录
   |  |  ├─ locales     # <- 语言包目录
   |  |  └─ index.ts    # <- 模块入口文件

应用入口

通过前后端的应用示例目录结构,我们可以知道前后端的功能架构一致

后端每个应用模块均采用典型的 MVC 架构。

前端的每个应用也采用类似后端的架构。

每个应用均有一个 App.phpindex.ts 作为应用入口,应用入口的作用为注册模块的路由、菜单,加载语言包等全局类功能,如下:

后端入口

通过生命周期我们可以了解到,利用不通时期的生命周期执行,我们可以在入口处注册全局类的参数和执行方法,如路由、应用层等。

<?php

declare(strict_types=1);

namespace App\Home;

class App extends \Dux\App\AppExtend
{

    public function init(\Dux\Bootstrap $app): void
    {
        // 框架初始化时执行
    }

    public function register(\Dux\Bootstrap $app): void
    {
        // 框架注册后执行
    }

    public function boot(\Dux\Bootstrap $app): void
    {
        // 框架运行前执行
    }
}

前端入口

与后端生命周期一样,前端也可以利用入口文件执行不通的生命周期方法。

import { appConfig, appContext, createApp, lazyComponent } from '@duxweb/dux-refine'


const init = (context: appContext) => {
  // 框架初始化时执行
}

const register = (context: appContext) => {
  // 框架注册后执行
}

const boot = (context: appContext) => {
  // 框架运行前执行
}

const config: appConfig = {
  init: init,
  register: register,
  boot: boot,
}

export default config