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

Tp5.0架构详解和跨控制器调用》有2个想法

  1. You’re so awesome! I don’t think I’ve read something like this
    before. So wonderful to discover somebody with a few unique thoughts on this issue.
    Seriously.. many thanks for starting this up. This website is one thing that is
    needed on the internet, someone with some originality!

  2. Its such as you learn my thoughts! You appear to know so much approximately
    this, such as you wrote the e-book in it or something.
    I think that you just can do with a few % to force the message
    home a little bit, but other than that, this is wonderful blog.

    A fantastic read. I’ll certainly be back.

评论已关闭。