thinkphp5.0学习(二):tp5.0架构和运转流程

注意:下文的application文件夹简写为app文件夹

一、TP架构的概述

thinkphp 使用MVC模式,它强制性的使应用程序的输入、处理和输出分开,使用MVC程序被分成三个核心部件:模型(M)、视图(V)、控制器(C),他们各自处理自己的任务。

二、url解析

http://www.tp.com/index.php/Index/index/index 
协议/域名/入口文件/模块/控制器/方法

1.应用

一个应用代表一个网站

2.入口文件

文件地址:应用\public\index.php 
作用:负责处理请求

3.模块(以前台为例)

模块地址:app\index 
作用:网站所有的前台相关都与其相关 
新建模块:在app目录下创建admin文件夹,并在文件夹中创建model、view、controller文件夹,在controller文件夹中创建控制器,方法见4.控制器

4.控制器

控制器目录:app\index\controller 
作用:书写业务逻辑 
新建控制器(以前台为例)

  1. 在前台控制器目录(app\index\controller)下新建User.php
  2. 在控制器中书写代码
<?php
// 声明命名空间(我理解为声明该文件所在的位置)
namespace app\index\controller;
// 声明控制器
class User
{
    function index()
    {
        echo 'user控制器下的index方法';
    }
}
?>

3.地址栏访问 
http://www.tp.com/index.php/index/User/index

4.注意:

  • 1.控制器的文件名必需首字母大写
  • 2.控制器中必需声明命名空间
  • 3.控制器中的类名必需和文件名一致

5、操作(方法)

1.操作地址 
操作一般都在控制器的文件中 
2.新建一个操作(以前台index控制器为例) 
1.打开前台index控制器(app\index\controller\Index.php) 
2.在控制器新建test方法

public function test()
{
    return "我是用户自己创建的方法";
}

3.地址栏访问 
http://www.tp.com/index.php/index/Index/test

6.模型(数据模型)

1.数据模型地址(app\index\model) 
2.作用:负责数据库相关的处理

7.视图(页面)

1.页面地址(app\index\view) 
2.作用:其实就是网站页面

三、命名空间

与目录相关(以前台index控制器为例) 
项目\app\index\controller的命名空间是 
namespace app\index\controller;

四、跨控制器调用

1.调用当前模块的其他控制器

// 调用当前模块的其他控制器
    function diaoyong(){
        // 方法一:使用命名空间
        $model=new \app\index\controller\User;
        $model->index();
        // 方法二:使用use,在开头处加上use \app\index\controller\User;
        $model=new User;
        $model->index();
        // 方法三:使用系统方法
        $model=controller('User');
        $model->index();
    }


2.调用其他模块的控制器中的方法

// 调用其他模块的控制器中的方法
    function diaoyongs(){
        // 方法一:使用命名空间
        $model=new \app\admin\controller\User;
        $model->index();
        echo '<hr>';
        // 方法二:使用use,在开头处加上use \app\admin\controller\User as AdminUser;
        $model=new AdminUser;
        $model->index();
        echo '<hr>';
        // 方法三:使用系统方法
        $model=controller('admin/User');
        $model->index();
    }

五、调用方法

1. 调用当前控制器的方法

    // 调用当前控制器的方法
    function fangfa(){
        // 方法一(this指向当前控制器)
        $this->diaoyongs();
        // 方法二(self指向当前控制器)
        self::diaoyongs();
        // 方法三(直接使用当前控制器)
        Index::diaoyongs();
        // 方法四(action)
        action('diaoyongs');
    }

2. 调用其他控制器的方法

// 调用其他控制器中的方法
    public function fangfas(){
        // 方法一
        $model=new \app\index\controller\User;
        $model->index();
        echo '<hr>';
        // 方法二
        action('User/index');
    }

3. 调用模块下的方法

// 调用其他模块中的方法
    public function mokuai(){
        // 方法一
        $model=new \app\admin\controller\User;
        $model->index();
        echo '<hr>';
        // 方法二
        action('admin/User/index');
    }

六、主要分析TP执行流程

1. 入口文件(项目\public\index.php)

作用:

  1. 定义目录常量
  2. 加载框架的引导目录

2. 加载框架的引导文件(项目\thinkphp\start.php)

作用: 
1. 引导基础文件 
2. 对应用进行运转

3. 加载框架的基础引导文件(项目\thinkphp\base.php)

作用: 
1. 加载系统常量 
2. 载入Loader类(项目\thinphp\library\think\loader.php) 
3. 引入环境变量 
4. 注册自动加载机制 
5. 注册异常处理机制(项目\thinkphp\library\think\Error.php) 
6. 加载惯例配置(项目\thinkphp\convention.php)

4. 运行应用(项目\thinkphp\library\think\App.php)下的run方法

  1. 第一步:加载当前控制器中的initCommon()
  2. 第二步:加载当前控制器的init()方法 ,加载各种配置文件,加载公共文件,加载语言包
  3. 第三步:设置时区
  4. 第四步:加载当前控制器 routeCheck()方法:路由检测
  5. 第五步:调用控制器中的exec()方法:根据用户的请求进行分发处理
  6. 第六步:根据不同的请求类型加载对应的文件 module方法,加载对应的控制器和对应的方法

5. 响应输出:用户看到的所有界面就加载出来了

猜你喜欢

转载自blog.csdn.net/qq_35396905/article/details/81180271
今日推荐