95.91p30.space\/index.php,ThinkPHP5.0框架开发--第2章 TP5.0架构

ThinkPHP5.0框架开发--第2章 TP5.0架构

第2章 TP5.0架构

==================================================

上次复习

1、如何安装TP

1、源代码包安装

2、Git安装

3、Composer安装

2、MVC模式

M model 数据模型

# 数据库相关的处理

V view 视图

# 页面

C controller 控制器

# 控制器就是这个网站的逻辑和流程

3、目录结构

==================================================

今日学习

1、TP架构的概述

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

2、URL解析

http://   www.tp.com  /index.php    /Index   /Index    /index

协议                   域名       入口文件      模块     控制器    方法

3、入口文件

1、文件地址

C:\AppServ\www\tp5\public\index.php

2、作用:

负责整个TP的请求

4、应用

1、应用地址

C:\AppServ\www\tp5\application

2、作用:

一个应用代表一个网站

5、模块(以前台为例)

1、模块地址

C:\AppServ\www\tp5\application\index

2、作用:

网站所有的前台相关都与其有关

3、新建后台模块

a、在应用目录下(C:\AppServ\www\tp5\application)新建admin目录

b、在admin目录下新建model、view和controller

c、在Controller目中新建Index控制器(Index.php)

d、在Index.php 中书写代码

// 声明命名空间

namespace app\admin\controller;

// 声明控制器

class Index{

public function index(){

return "我是后台的控制器";

}

}

e、通过地址栏访问

http://www.tp.com/index.php/Admin/Index/index

6、控制器

1、控制器目录

C:\AppServ\www\tp5\application\index\controller

2、作用:

书写业务逻辑

3、新建控制器(以前台为例)

a、正前台控制器目录(C:\AppServ\www\tp5\application\index\controller) 下新建User.php

b、在控制器中能书写代码

// 声明命名空间

namespace app\index\controller;

// 声明控制器

class User{

// index 方法

public function index(){

return "我是前台User控制器中的index方法";

}

}

c、地址栏访问

http://www.tp.com/index.php/Index/user/index

d、注意:

1、控制器的文件名必须首字母大写

2、控制中必须声明命名空间

3、控制器中类名必须和文件名一致

7、操作(方法)

1、操作地址

操作一般都在控制器的文件中

2、新建一个操作(以前台index控制器为例)

1、打开前台index控制器(C:\AppServ\www\tp5\application\index\controller\Index.php)

2、在控制器新建test方法

public function test(){

return "我是用户自己创建的方法";

}

3、地址栏访问

http://www.tp.com/index.php/Index/Index/test

8、模型(数据模型)

1、数据模型地址

C:\AppServ\www\tp5\application\index\model

2、作用:

负责数据库相关的处理

9、视图(页面)

1、视图地址

C:\AppServ\www\tp5\application\index\view

2、作用:

其实就是网站页面

10、命名空间

与目录有关(以前台index控制器命名空间为例)

C:\AppServ\www\tp5\application\index\controller

namespace app\index\controller;

11、跨控制器调用

1、使用命名空间

$model=new \app\admin\controller\Index;

echo $model->index();

2、使用use

use \app\admin\controller\Index as AdminIndex;

$model=new AdminIndex();

echo $model->index();

3、系统方法

# 系统方法一般在(C:\AppServ\www\tp5\thinkphp\helper.php)

$model=controller('admin/Index');

echo $model->index();

93d4f23a32e87ada2b08da0fad65b566.png

1 <?php2 namespace app\index\controller;3

4 //use \app\index\controller\User;5

6 // use \app\admin\controller\Index as AdminIndex;

7 classIndex8 {9 public functionindex()10 {11 return '

:)

ThinkPHP V5十年磨一剑 - 为API开发设计的高性能框架

[ V5.0 版本由 七牛云 独家赞助发布 ]
';12 }13

14 public functiontest(){15

16 return "我是用户自己创建的方法";17 }18

19 //调用当前模块User控制器

20

21 public functiondiaoyong(){22

23 //调用当前模块User控制器

24

25 $model=new\app\index\controller\User;26

27 echo $model->index();28

29

30 echo "


";31 //使用use

32

33 $model=newUser;34

35 echo $model->index();36

37 echo "


";38

39 //使用系统方法

40

41 $model=controller('User');42

43 echo $model->index();44

45

46 }47

48 //调用后台模块的

49

50 public functiondiaoyongs(){51

52 //使用命名空间

53

54 $model=new\app\admin\controller\Index;55

56 echo $model->index();57

58 echo "


";59

60 $model=newAdminIndex();61

62 echo $model->index();63

64 echo "


";65

66 $model=controller('admin/Index');67

68 echo $model->index();69 }70

71 //调用当前跨控制器中的方法

72

73 public functionfanfa(){74 //调用当前控制器的test方法

75

76 echo $this->test();77

78 echo "


";79

80 echo self::test();81

82 echo "


";83

84 echo Index::test();85

86 echo "


";87

88 echo action('test');89

90 }91

92 // 调用其他控制器中的方法

93

94 public functionfanfas(){95 $model=new\app\index\controller\User;96

97 echo $model->index();98

99 echo "


";100

101 echo action('User/index');102 }103

104 // 调用后台模块的index方法

105

106 public functionfanfass(){107

108 $model=new\app\admin\controller\Index;109

110

111 echo $model->index();112

113 echo "


";114

115 echo action('admin/Index/index');116 }117

118 }

说明:

系统方法controller可以得到控制器,可以用得到的控制器去得到方法,也可以直接用action方法可以得到方法,

系统方法里面的斜杠是顺的,命名空间里面的斜杠是反的,系统方法里面的斜杠写错了是得不到结果的。

12、调用方法

1、调用当前控制器的test方法

1、使用面向对象的技术

echo $this->test();

echo self::test();

echo Index::test();

2、使用系统方法

echo action('test');

2、调用User控制器下的index方法

1、命名空间

$model=new \app\index\controller\User;

echo $model->index();

2、使用系统方法

echo action('User/index');

3、调用后台模块下Index控制器index方法

1、命名空间

$model=new \app\admin\controller\Index;

echo $model->index();

2、使用系统方法

echo action('admin/Index/index');

13、主要分析TP执行流程

1、入口文件(C:\AppServ\www\tp5\public\index.php)

作用:

1)定义目录常量

2)加载框架引导目录

e193d6079fd87489196a946ac0067d2d.png

2、加载框架的引导文件(C:\AppServ\www\tp5\thinkphp\start.php)

作用:

1) 引导基础文件

2) 对应用进行运转

3df7da22fb73479738649e9182927d49.png

3、加载框架的基础引导文件(C:\AppServ\www\tp5\thinkphp\base.php);

作用:

1) 加载系统常量

2) 引入loader类 (C:\AppServ\www\tp5\thinkphp\library\think\loader.php)

3) 引入环境变量

4) 注册自动记载机制

5) 注册异常处理机制(C:\AppServ\www\tp5\thinkphp\library\think\Error.php)

6) 记载惯例配置(C:\AppServ\www\tp5\thinkphp\convention.php)

29ae8b44e5f2548e34cb83ba6aa1f017.png

1 <?php2 //+----------------------------------------------------------------------3 // | ThinkPHP [ WE CAN DO IT JUST THINK ]4 // +----------------------------------------------------------------------5 // | Copyright (c) 2006~2017 http://thinkphp.cn All rights reserved.6 // +----------------------------------------------------------------------7 // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )8 // +----------------------------------------------------------------------9 // | Author: liu21st 10 // +----------------------------------------------------------------------

11

12 define('THINK_VERSION', '5.0.10');13 define('THINK_START_TIME', microtime(true));14 define('THINK_START_MEM',memory_get_usage());15 define('EXT', '.php');16 define('DS',DIRECTORY_SEPARATOR);17 defined('THINK_PATH') or define('THINK_PATH', __DIR__ .DS);18 define('LIB_PATH', THINK_PATH . 'library' .DS);19 define('CORE_PATH', LIB_PATH . 'think' .DS);20 define('TRAIT_PATH', LIB_PATH . 'traits' .DS);21 defined('APP_PATH') or define('APP_PATH', dirname($_SERVER['SCRIPT_FILENAME']) .DS);22 defined('ROOT_PATH') or define('ROOT_PATH', dirname(realpath(APP_PATH)) .DS);23 defined('EXTEND_PATH') or define('EXTEND_PATH', ROOT_PATH . 'extend' .DS);24 defined('VENDOR_PATH') or define('VENDOR_PATH', ROOT_PATH . 'vendor' .DS);25 defined('RUNTIME_PATH') or define('RUNTIME_PATH', ROOT_PATH . 'runtime' .DS);26 defined('LOG_PATH') or define('LOG_PATH', RUNTIME_PATH . 'log' .DS);27 defined('CACHE_PATH') or define('CACHE_PATH', RUNTIME_PATH . 'cache' .DS);28 defined('TEMP_PATH') or define('TEMP_PATH', RUNTIME_PATH . 'temp' .DS);29 defined('CONF_PATH') or define('CONF_PATH', APP_PATH); //配置文件目录

30 defined('CONF_EXT') or define('CONF_EXT', EXT); //配置文件后缀

31 defined('ENV_PREFIX') or define('ENV_PREFIX', 'PHP_'); //环境变量的配置前缀32

33 // 环境常量

34 define('IS_CLI', PHP_SAPI == 'cli' ? true : false);35 define('IS_WIN', strpos(PHP_OS, 'WIN') !== false);36

37

38 // 载入Loader类

39 require CORE_PATH . 'Loader.php';40

41 // 加载环境变量配置文件

42 if (is_file(ROOT_PATH . '.env')) {43 $env = parse_ini_file(ROOT_PATH . '.env', true);44 foreach ($env as $key => $val) {45 $name = ENV_PREFIX . strtoupper($key);46 if (is_array($val)) {47 foreach ($val as $k => $v) {48 $item = $name . '_' . strtoupper($k);49 putenv("$item=$v");50 }51 } else{52 putenv("$name=$val");53 }54 }55 }56

57 // 注册自动加载

58 \think\Loader::register();59

60 // 注册错误和异常处理机制

61 \think\Error::register();62

63 // 加载惯例配置文件

64

65 \think\Config::set(include THINK_PATH . 'convention' . EXT);

4、运行应用(C:\AppServ\www\tp5\thinkphp\library\think\App.php) 下的run方法;

1、第一步: 加载当前控制器中 initCommon() 方法

2、第二步: 加载当前控制器中 init() 方法

1、加载各种配置文件

2、加载公共文件

3、加载语言包

3、第三步: 设置时区

4、第四步: 加载当前控制器 routeCheck() 方法 路由检测

5、第五步: 调用控制器中exec方法

根据用户请求进行分发处理

6、第六步: 根据不同请求类型记载对应文件 module方法

加载到对应的控制器和对应方法

e74a388dd7a3393a9d2c34ff002aa5fe.png

5、响应输出

用户看到的所有界面就加载出来了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值