ThinkPHP架构
创始人
2024-04-12 14:51:56

文章目录

  • 一、架构总览
    • 1.1、有关常用的一些概念
      • 入口文件
      • 应用
      • 模块
      • 控制器
      • 操作
      • 模型
      • 视图
      • 驱动
      • 行为
      • 命名空间【全限定类名】
        • 1.补充
  • 二、生命周期
  • 三、入口文件
  • 四、URL访问
  • 五、模块设计
  • 六、命明空间
  • 七、自动加载
  • 八、Traits引入
  • 九、API友好

一、架构总览

ThinkPHP5.0应用基于MVC(模型-视图-控制器)的方式来组织。

  • Controller(控制器)、Model(模型)、 View(视图)
    在这里插入图片描述

5.0的URL访问受路由决定,如果关闭路由或者没有匹配路由的情况下,则是基于:
http://serverName/index.php(或者其它应用入口文件)/模块/控制器/操作/参数/值…

// 是否开启路由'url_route_on'           => true

1.1、有关常用的一些概念

入口文件

程序的入口,只有通过本模块,才可以访问到,对应要访问的主程序;
在php中通过有index.php(前台应用程序入口)、还有后台程序入口(自动安装后会修改为随机名)、还有可以自定义。

应用

应用在ThinkPHP中是一个管理系统架构及生命周期的对象,由系统中的thinkphp/library/think/App.php完成,通常在入口文件中调用和执行。

// [ 应用入口文件 ]
// 定义应用目录
//__DIR__:当前文件所在的文件夹。
define('APP_PATH', __DIR__ . '/../application/');// 判断是否安装
if (!is_file(APP_PATH . 'admin/command/Install/install.lock')) {header("location:./install.php");exit;
}// 加载框架引导文件
require __DIR__ . '/../thinkphp/start.php';

通过入口文件(index.php)然后入口文件加载框架的启动类(start.php)

start.php
// ThinkPHP 引导文件
// 1. 加载基础文件
require __DIR__ . '/base.php';// 2. 执行应用
App::run()->send();
  • 启动类start.php 通过加载 框架的 base.php (基础类)、
    【通过此类base.php,通过获取系统文件位置信息,调用注册自动加载机制(Load.php),若本地环境变量(.env)存在,若其中有内容,取出其配置信息,将key和value分别取出通过putenv设置服务器的环境变量。】
    完成自动加载【Loader::register()
    注册错误信息和异常处理【\think\Error::register();
    加载惯例配置文件【\think\Config::set(include THINK_PATH . 'convention' . EXT);
    • 惯例配置文件:核心框架内置的配置文件。
  • 启动主启动类,将信息发送到客户端页面;
    应用具有自己独立的配置文件、公共(函数)文件。

模块

一个典型的应用是由多个模块组成的,这些模块通常都是应用目录下面的一个子目录,每个模块都有自己独立的配置文件、公共文件和类库文件。

// 是否支持多模块
'app_multi_module'       => true

控制器

  • 每个模块拥有独立的MVC类库及配置文件,一个模块下面有多个控制器负责响应请求,而每个控制器其实就是一个独立的控制器类。
  • 控制器主要负责请求的接收,并调用相关的模型处理,并最终通过视图输出。
  • 严格来说,控制器不应该过多的介入业务逻辑处理。

事实上,5.0中控制器是可以被跳过的,通过路由我们可以直接把请求调度到某个模型或者其他的类进行处理。
5.0的控制器类比较灵活,可以无需继承任何基础类库:

namespace app\index\controller;class Index 
{public function index(){return 'hello,thinkphp!';}
}

操作

一个控制器包含多个操作(方法),操作方法是一个URL访问的最小单元。

public function hello($name)
{return 'Hello,'.$name;
}

操作方法可以不使用任何参数,如果定义了一个非可选参数,则该参数必须通过用户请求传入,如果是URL请求,则通常是$_GET或者$_POST方式传入。

模型

和数据库交互,处理业务逻辑。

模型类并不一定要访问数据库,而且在5.0的架构设计中,只有进行实际的数据库查询操作的时候,才会进行数据库的连接,是真正的惰性连接
ThinkPHP的模型层支持多层设计,你可以对模型层进行更细化的设计和分工,例如把模型层分为逻辑层/服务层/事件层等等。

视图

控制器调用模型类后返回的数据通过视图组装成不同格式的输出。视图根据不同的需求,来决定调用模板引擎进行内容解析后输出还是直接输出。

视图通常会有一系列的模板文件对应不同的控制器和操作方法,并且支持动态设置模板目录。
在这里插入图片描述
在这里插入图片描述

驱动

系统很多的组件都采用驱动式设计,从而可以更灵活的扩展,驱动类的位置默认是放入核心类库目录下面,也可以重新定义驱动类库的命名空间而改变驱动的文件位置。

行为

行为(Behavior)是在预先定义好的一个应用位置执行的一些操作。类似于AOP【AOP面向切面编程+IOC控制反转】编程中的“切面”的概念,给某一个切面绑定相关行为就成了一种类AOP编程的思想。所以,行为通常是和某个位置相关,行为的执行时间依赖于绑定到了哪个位置上。

要执行行为,首先要在应用程序中进行行为侦听,例如:

// 在app_init位置侦听行为
\think\Hook::listen('app_init');

然后对某个位置进行行为绑定:

// 绑定行为到app_init位置
\think\Hook::add('app_init','\app\index\behavior\Test');

一个位置上如果绑定了多个行为的,按照绑定的顺序依次执行,除非遇到中断。

命名空间【全限定类名】

ThinkPHP5采用了PHP的命名空间进行类库文件的设计和规划,并且符合PSR-4的自动加载规范。是为了解决路径重名出现的。

1.补充

  • PSR-4

PSR 是PHP Standards Recommendation的简称,制定的代码规范,简称PSR,是代码开发的事实标准。
PSR-4使代码更加规范,能够满足面向package的自动加载,它规范了如何从文件路径自动加载类,同时规范了自动加载文件的位置
PSR-4 规范也描述了放置 autoload 文件。

系统学习PSR-4

二、生命周期

三、入口文件

四、URL访问

五、模块设计

六、命明空间

七、自动加载

八、Traits引入

九、API友好

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...