🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
![](https://img.kancloud.cn/89/7a/897a2086ee7cd90836e999e2c5b8de50_968x414.jpeg) `ZrWebPHP`应用基于`MVC`(模型-视图-控制器)的方式来组织。 > MVC是一个设计模式,它强制性的使应用程序的输入、处理和输出分开。使用MVC应用程序被分成三个核心部件:模型(M)、视图(V)、控制器(C),它们各自处理自己的任务。 URL访问受路由决定,如果关闭严格模式,则是基于: > `http://localhost/模块/控制器/操作/a=1&b=2` 反之开启了严格模式: > 如果首页有此模块的入口文件[规定为PHP],就必须通过 http://localhost/入口文件/控制器/操作/a=1&b=2 下面的一些概念有必要做下了解,可能在后面的内容中经常会被提及。 ## 入口文件 用户请求的PHP文件,负责处理一个请求(注意,不一定是URL请求)的生命周期,最常见的入口文件就是`index.php`,有时候也会为了某些特殊的需求而增加新的入口文件,例如给后台模块单独设置的一个入口文件`admin.php`或者一个控制器程序入口`zrweb`都属于入口文件。 ## 应用 应用在`ZrWebPHP`中是一个管理系统架构及生命周期的对象,由系统的`\zrweb\App`类完成,应用通常在入口文件中被调用和执行,具有相同的应用目录(`APP_PATH`)的应用我们认为是同一个应用,但一个应用可能存在多个入口文件。 应用具有自己独立的配置文件、公共(函数)文件。 ## 模块 一个典型的应用是由多个模块组成的,这些模块通常都是应用目录下面的一个子目录,每个模块都有自己独立的配置文件、公共文件和类库文件。 ## 控制器 每个模块拥有独立的`MVC`类库及配置文件,一个模块下面有多个控制器负责响应请求,而每个控制器其实就是一个独立的控制器类。 控制器主要负责请求的接收,并调用相关的模型处理,并最终通过视图输出。严格来说,控制器不应该过多的介入业务逻辑处理。 一个典型的`Index`控制器类如下: ~~~ namespace app\index\controller; class Index { public function index() { return 'hello,Cumin!'; } } ~~~ ## 操作 一个控制器包含多个操作(方法),操作方法是一个URL访问的最小单元。 下面是一个典型的`Index`控制器的操作方法定义,包含了两个操作方法: ~~~ namespace app\index\controller; class Index { public function index() { return 'index'; } public function hello($name) { return 'Hello,'.$name; } } ~~~ 操作方法可以不使用任何参数,如果定义了一个非可选参数,则该参数必须通过用户请求传入,如果是URL请求,则通常是`$_GET`或者`$_POST`方式传入。 ## 模型 模型类通常完成实际的业务逻辑和数据封装,并返回和格式无关的数据。 ## 视图 控制器调用模型类后返回的数据通过视图组装成不同格式的输出。视图根据不同的需求,来决定调用模板引擎进行内容解析后输出还是直接输出。 视图通常会有一系列的模板文件对应不同的控制器和操作方法,并且支持动态设置模板目录。 采用模板引擎:Smarty ## 命名空间 `ZrWebPHP`采用了`PHP`的命名空间进行类库文件的设计和规划,并且符合`PSR-4`的自动加载规范。 ## Composer 需要使用 `Composer`,请配置config/config.php文件中的composer数组,并自己引入Composer包,框架提供Composer的json文件,在根目录自己配置就行了! 不会配置可以看: [如何配置属于自己的Composer包](http://zrv7.com/post_20.html)