一.控制器
控制器:为达成某一目的而将原本散落的类及方法全部放在一个更大的类中,这个更大的类就是控制器。控制器可以实现接收用户的指令,在经过内部的类及方法处理后将结果返回给用户,整个处理过程中用到的各种类、方法、属性等基本都放在控制器中,有利于代码的维护和统一。
二.请求对象
请求对象可以分解为发送请求、得到反馈的过程。主要有两种方式,参数绑定和依赖注入。
(1)参数绑定:通过URL地址栏传参数的方法,参数绑定的方法有两种,按名称绑定和按顺序绑定。按名称绑定的写法为参数名1/参数值1/参数名2/参数值2....;按顺序绑定不需要写参数名,但要求地址栏参数的顺序与方法中的参数顺序一致。默认采用按名称绑定,修改配置在config/app.php文件中url_param_type参数。
(2)依赖注入:由于地址栏不能传递对象参数,因此在当前方法中,将另一个类的对象作为本类的参数传入,再在本类中使用该对象,进而实现传递对象参数,这就是依赖注入。
三.依赖注入的两种常见方式
1.构造方法的基础代码:
<?php
namespace app\index\Controller;
use think\Request;//使用Request类
class Index{
//声明一个$request接收对象参数
protected $request;
//使用构造方法实现首先得到调用类的对象
public function __construct(Request $request){
$this->request = $request;
}
//在要调用的方法中直接使用这个类的对象
public function index(){
var_dump($this->request->param());
}
}
?>点击 "运行实例" 按钮查看在线实例
如果继承了控制器基类think\Controller,则构造方法注入也不需要单独写,可以直接使用$this->request调用当前的请求对象,代码如下:
<?php
namespace app\index\Controller;
use think\Controller;//使用Controller类
class Index extends Controller{//继承Controller类,实现构造方法注入的自动实现
protected $request;
public function index(){
var_dump($this->request->param());
}
}
?>点击 "运行实例" 按钮查看在线实例
URL路由:http://tp51.com/index.php/index/index/index/site/上海/course/PHP
结果均如下:

2.操作方法代码如下:
<?php
namespace app\index\controller;
use think\Controller;//无论是否继承controller基类,均可使用操作方法注入
use think\Request;
class Index extends Controller{
public function index(Request $request){//在每个方法中都使用依赖注入
var_dump($request->param());
}
}
?>点击 "运行实例" 按钮查看在线实例
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号