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.php
和 index.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