Destoon 是一个基于 PHP/MySQL 的 B2B 电子商务网站管理系统。它的核心运行流程遵循典型的 MVC(Model-View-Controller)模式,并结合了其自身的一些特性(如模块化、伪静态、缓存机制等)。以下是 Destoon 系统处理一个 HTTP 请求的核心运行流程:
1. 用户发起请求 (HTTP Request):
用户在浏览器中输入一个 Destoon 网站的 URL(例如:`http://www.example.com/product/123.html`)或点击网站上的链接/按钮。
浏览器向 Web 服务器(通常是 Apache 或 Nginx)发送 HTTP 请求。
2. Web 服务器处理:
Web 服务器接收到请求。
URL 重写 (Rewrite): 如果配置了伪静态规则(Destoon 强烈推荐),Web 服务器(通过 `.htaccess` 或 Nginx 配置)会将“漂亮”的 URL 重写回 Destoon 的入口文件(通常是 `index.php`)能识别的动态参数格式。例如:
`product/123.html` 可能被重写为 `index.php?moduleid=5&itemid=123`(`moduleid=5` 代表产品模块)。
核心参数通常是 `moduleid`(确定模块)和 `file`(确定模块内的具体操作文件/方法)。
3. 入口文件 (`index.php`):
请求最终被路由到 Destoon 的入口文件 `index.php`。
加载核心框架:
设置基本常量(如 `DT_ROOT` 系统根目录)。
包含核心配置文件 `config.inc.php`(包含数据库连接信息、基本系统设置等)。
包含核心函数库文件 `common.inc.php`。这是最关键的一步:
初始化数据库连接(使用 `DB` 类)。
加载系统缓存(`cache.php`),包含模块配置、模型定义、分类信息、设置项等核心数据,避免频繁查询数据库。
初始化模板引擎(通常是 Smarty)。
处理全局 `$_GET`, `$_POST` 参数,进行基本的安全过滤。
处理用户会话(Session)。
根据 `moduleid` 加载对应模块的配置信息(从系统缓存中读取)。
执行全局钩子(Hook)或插件(Plugin)的特定点(如果有)。
4. 路由分发 (根据 `moduleid` 和 `file`):
核心框架根据 `moduleid` 参数确定用户请求的是哪个功能模块(例如:新闻 `moduleid=2`,产品 `moduleid=5`,公司 `moduleid=4`,会员中心等)。
根据 `file` 参数(或者默认值,如 `index`)确定要执行该模块下的哪个具体功能文件(Controller)。
如果请求的是后台管理页面 (`admin.php` 作为入口),流程类似,但会额外进行严格的权限验证。
5. 加载并执行模块控制器 (Controller):
框架定位到对应模块目录下的控制器文件(例如:`module/product/admin/product.inc.php` 或 `module/product/product.inc.php`)。
包含并执行该控制器文件:
控制器文件通常包含一个与 `file` 参数同名的类(或直接包含函数)。
框架会实例化这个类(或调用相应函数)。
控制器负责:
业务逻辑处理: 根据请求参数(`$_GET`, `$_POST`)执行特定操作(如查询数据库、添加数据、修改数据、删除数据、处理表单提交等)。
调用模型 (Model): 控制器通过实例化模型类(如 `$product = new product();`)来访问和操作数据库。模型类封装了与数据库表交互的具体方法(CRUD)。
数据处理: 对从模型获取的数据进行必要的处理、验证、格式化。
权限检查 (尤其后台): 验证当前用户(管理员或会员)是否有权限执行该操作。
准备视图数据: 将处理好的数据(如产品详情、列表数组)赋值给模板变量。
6. 模型 (Model) 操作数据库:
控制器调用的模型方法内部使用 Destoon 封装的数据库操作类(通常是 `DB` 类或 `dba` 类)。
这些类执行实际的 SQL 查询(SELECT, INSERT, UPDATE, DELETE)。
查询结果被返回给控制器。
7. 加载并渲染模板 (View):
控制器逻辑执行完毕后,确定要加载哪个模板文件(`.htm` 文件)。
将之前准备好的模板变量(包含所有要显示的数据)传递给模板引擎(Smarty)。
模板引擎解析 `.htm` 文件:
处理模板标签(如 `{loop}...{/loop}`, `{if}...{/if}`, `{$variable}`, `{include 'file.htm'}`, 模块标签如 `{tag("moduleid=5&condition=status=3&pagesize=10&order=addtime desc&template=list-product")}`)。
将动态数据填充到模板的对应位置。
生成最终的纯 HTML 内容。
8. 输出响应 (HTTP Response):
框架将模板引擎渲染好的 HTML 内容输出。
同时输出必要的 HTTP 头信息(如 Content-Type, Cache-Control 等)。
如果启用了页面缓存(Gzip 压缩或 Destoon 自身的 HTML 文件缓存),会在此环节处理。
9. 浏览器接收并渲染:
Web 服务器将生成的 HTML 内容发送回用户的浏览器。
浏览器解析 HTML、CSS 和 JavaScript,将网页呈现给用户。
关键点总结:
MVC 架构: 清晰分离逻辑(Controller)、数据(Model)和展示(View)。
入口单一: 所有请求都通过 `index.php`(前台)或 `admin.php`(后台)分发。
模块化: 功能按模块组织,核心通过 `moduleid` 识别和加载模块。
依赖缓存: 系统启动时加载大量核心配置和数据结构缓存 (`cache.php`),极大提升性能。
数据库抽象: 通过 `DB` 或 `dba` 类操作数据库,提供一定程度的兼容性和便捷性。
模板引擎: 使用 Smarty 分离 PHP 逻辑和 HTML 代码。
伪静态: 通过 URL 重写实现“静态化”URL,对 SEO 友好。
钩子/插件: 提供扩展点,允许在不修改核心代码的情况下增加功能。
后台管理 (`admin.php`) 流程的特殊性:
1. 严格的登录验证: 必须先登录管理员账号。
2. 菜单与权限加载: 根据管理员角色加载其有权限访问的菜单项。
3. 操作权限验证: 在执行具体控制器方法前,会再次验证当前管理员是否有权限执行该操作(增删改查等)。
4. 模块管理界面: 后台控制器通常提供数据列表、添加表单、编辑表单、删除按钮等管理界面。
5. 系统设置: 提供全局或模块级的配置管理功能。
理解这个流程有助于进行 Destoon 的二次开发、性能优化和故障排查。