1、TP架构概述
MVC是一个设计模式,它强制性的使应用程序的输入、处理和输出分开。使用MVC应用程序被分成三个核心部件:模型(M)、视图(V)、控制器(C),它们各自处理自己的任务。
2、url解析
http://localhost/tp5/public /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中书写代码
<?php
//申明命名空间
namespace app\admin\controller;//本质就是文件路径
//声明控制器
class Index{
public function index(){
return "我是后台的控制器";
}
}
?>
e、通过地址栏访问
http://localhost/tp5/public /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、在控制器中书写代码
<?php
//声明命名空间
namespace app\index\controller;
//声明控制器
class User{
//index方法
public function index(){
return "我是前台User控制器中的index方法";
}
}
?>
c、地址栏访问
http://localhost/tp5/public /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方法
<?php
namespace app\index\controller;
//一个控制器类
class Index
{
//框架自带的方法
public function index()
{
return '<style type="text/css">*{ padding: 0; margin: 0; } .think_default_text{ padding: 4px 48px;} a{color:#2E5CD5;cursor: pointer;text-decoration: none} a:hover{text-decoration:underline; } body{ background: #fff; font-family: "Century Gothic","Microsoft yahei"; color: #333;font-size:18px} h1{ font-size: 100px; font-weight: normal; margin-bottom: 12px; } p{ line-height: 1.6em; font-size: 42px }</style><div style="padding: 24px 48px;"> <h1>:)</h1><p> ThinkPHP V5<br/><span style="font-size:30px">十年磨一剑 - 为API开发设计的高性能框架</span></p><span style="font-size:22px;">[ V5.0 版本由 <a href="http://www.qiniu.com" target="qiniu">七牛云</a> 独家赞助发布 ]</span></div><script type="text/javascript" src="https://tajs.qq.com/stats?sId=9347272" charset="UTF-8"></script><script type="text/javascript" src="https://e.topthink.com/Public/static/client.js"></script><think id="ad_bd568ce7058a1091"></think>';
}
//新建的方法
public function test(){
return "我是用户自己创建的方法";
}
}
3、地址栏访问
http://localhost/tp5/public/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、命名空间
1、与目录有关(以前台index控制器命名空间为例)
(C:\AppServ\www\tp5\application\index\controller)
———————— namespace app\index\controller;
11、跨控制器调用
三种方法
<?php
namespace app\index\controller;
use \app\index\controller\User;
use \app\admin\controller\Index as AdminIndex;//<-又引入一个要改名
//****本身为Index控制器类,再引入一个Index就会重名***
class Index //<-Index控制器
{
public function index()
{
return '<style type="text/css">*{ padding: 0; margin: 0; } .think_default_text{ padding: 4px 48px;} a{color:#2E5CD5;cursor: pointer;text-decoration: none} a:hover{text-decoration:underline; } body{ background: #fff; font-family: "Century Gothic","Microsoft yahei"; color: #333;font-size:18px} h1{ font-size: 100px; font-weight: normal; margin-bottom: 12px; } p{ line-height: 1.6em; font-size: 42px }</style><div style="padding: 24px 48px;"> <h1>:)</h1><p> ThinkPHP V5<br/><span style="font-size:30px">十年磨一剑 - 为API开发设计的高性能框架</span></p><span style="font-size:22px;">[ V5.0 版本由 <a href="http://www.qiniu.com" target="qiniu">七牛云</a> 独家赞助发布 ]</span></div><script type="text/javascript" src="https://tajs.qq.com/stats?sId=9347272" charset="UTF-8"></script><script type="text/javascript" src="https://e.topthink.com/Public/static/client.js"></script><think id="ad_bd568ce7058a1091"></think>';
}
public function test(){
return "我是用户自己创建的方法";
}
public function diaoyong(){
//调用当前模块User控控制器
$model=new \app\index\controller\User;
echo $model->index();
echo "<hr>";
//使用use
$model=new User;
echo $model->index();
echo"<hr>";
//使用系统方法
$model=controller('User');
echo $model->Index();
}
//调用后台模块
public function diaoyongs(){
//使用命名空间
$model=new \app\admin\controller\Index;
echo $model->index();
echo "<hr>";
//使用use
$model=new AdminIndex();
echo $model->index();
echo "<hr>";
//使用系统方法
$model=controller('admin/Index');
echo $model->index();
}
}
12、调用方法(跨方法调用)
1、调用当前控制器的test方法
public function fangfa(){
//测试此方法
echo "123";
echo "<hr>";
//调用当前控制器的test方法
echo $this->test();
echo "<hr>";
//使用面向对象技术
echo self::test();
echo"<hr>";
//使用系统方法
echo action('test');
2、调用User控制器下的index方法
//调用其他控制器中的方法
public function fangfas(){
//命名空间
$model=new \app\index\controller\User;
echo $model->index();
echo"<hr>";
//系统方法
echo action('User/index');
}
3、调用后台模块下Index控制器index方法
//调用后台模块的index方法
public function fangfass(){
//命名空间
$model=new \app\admin\controller\Index;
echo $model->index();
echo"<hr>";
//系统方法
echo action('admin/Index/index');
}
13、主要分析TP执行流程
1、入口文件(C:\AppServ\www\tp5\public\index.php)
作用:
1)定义目录常量
2)加载框架的引导目录
2、加载框架的引导目录(C:\AppServ\www\tp5\thinkphp\start.php)
1)引导基础文件
2)对应用进行运转
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\conventon.php)
4、运行应用(C:\AppServ\www\tp5\thinkphp\library\think\App.php)下的run方法;
1、第一步:加载当前控制器中的initCommon()方法
2、第二部:加载当前控制器中init()方法
加载各种配置文件
加载公共文件
加载语言包
3、第三部:设置时区
4、第四部:加载当前控制器routeCheck()方法路由检测
5、第五步:调用控制器中的exec方法
根据用户请求进行分发处理
6、第六步:根据不同请求类型记载对应文件module方法
加载到对应的控制器和对应的方法
5、响应输出
】、