Tp5.0架构详解和跨控制器调用

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();
 		
    }
    
}

Leave a comment

您的电子邮箱地址不会被公开。 必填项已用 * 标注