1、TP架构的概述
ThinkPHP 使用了MVC模式,它强制性的使应用程序的输入、处理和输出分开。使用MVC应用程序被分成三个核心部件:模型(M)、视图(V)、控制器(C),它们各自处理自己的任务。
2、URL解析
http:// www.tp.com /index.php /Index /Index /index
协议 域名 入口文件 模块 控制器 方法
3、入口文件
1、文件地址
\public\index.php
2、作用:
负责整个TP的请求
4、应用
1、应用地址
\application
2、作用:
一个应用代表一个网站
5、模块(以前台为例)
1、模块地址
\application\index
2、作用:
网站所有的前台相关都与其有关
3、新建后台模块
a、在应用目录下(\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
新建后台(admin)模块以及index控制器demo示例
<?php
/**
* @Author: ysq
* @Date: 2020-02-04 12:21:00
* @Last Modified by: ysq
* @Last Modified time: 2020-02-04 12:22:45
*/
// 声明命名空间
namespace app\admin\controller;
//声明控制器
class Index{
public function index(){
return "我是后台的控制器";
}
}
6、控制器
1、控制器目录
\application\index\controller
2、作用:
书写业务逻辑
3、新建控制器(以前台为例)
a、正前台控制器目录(application\index\controller) 下新建User.php
b、在控制器中能书写代码
<?php
// 声明命名空间
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、控制器中类名必须和文件名一致
新建控制器demo示例
yunzhimeng/tp5/application/index/controller/User.php
<?php
/**
* @Author: ysq
* @Date: 2020-02-04 12:34:44
* @Last Modified by: ysq
* @Last Modified time: 2020-02-04 12:37:41
*/
// 声明命名空间
namespace app\index\controller;
// 声明控制器
class User{
//index方法
public function index()
{
return "我是前台User控制器中的index方法";
}
}
7、操作(方法)
1、操作地址
操作一般都在控制器的文件中
2、新建一个操作(以前台index控制器为例)
1、打开前台index控制器(\application\index\controller\Index.php)
2、在控制器新建test方法
public function test(){
return "我是用户自己创建的方法";
}
3、地址栏访问
http://www.tp.com/index.php/Index/Index/test
8、模型(数据模型)
1、数据模型地址
\application\index\model
2、作用:
负责数据库相关的处理
9、视图(页面)
1、视图地址
\application\index\view
2、作用:
其实就是网站页面
10、命名空间
与目录有关(以前台index控制器命名空间为例)
\application\index\controller
namespace app\index\controller;
11、跨控制器调用
- 使用命名空间: new \app\index\controller\User
<?php
namespace app\index\controller;
class Index
{
public function call()
{
//调用前台的user控制器
$user = new \app\index\controller\User;
echo $user->index();
}
}
- 使用Use: use app\index\controller\User;
<?php
namespace app\index\controller;
//引入命名空间
use app\index\controller\User;
class Index
{
public function call()
{
$user = new User;
echo $user->index();
}
}
- 系统方法controller() : 系统方法一般在 \thinkphp\helper.php
<?php
namespace app\index\controller;
//引入命名空间
use app\index\controller\User;
class Index
{
public function call()
{
//使用系统方法
$user = controller('user');
echo $user->index();
}
}
下面是跨后台模块调用
<?php
namespace app\index\controller;
//引入系统数据类
use think\Db;
//引入系统控制器类
use think\Controller;
//引入User控制器方法
use app\index\controller\User;
use app\admin\controller\Index as Inindex;
class Index
{
public function test(){
return "我是用户自己创建的方法";
}
public function call()
{
//调用前台的user控制器
// $user = new \app\index\controller\User;
// echo $user->index();
// //使用User命令空间
// echo "<br>";
// $user = new User;
// echo $user->index();
//
// echo "<br>";
// //使用系统方法
// $user = controller('user');
// echo $user->index();
//调用后台的index控制器
// $user = new \app\admin\controller\Index;
// echo $user->index();
//使用Inindex命名空间
$index = new Inindex();
echo $index->index();
echo "<br>";
$index = controller('admin/index');
echo $index->index();
}
}