使用基类 think\Request 或者使用静态代理 think\facade\Request

1. 请求对象调用

我们通常使用依赖注入的方式完成请求对象的注入,而不用显示的创建对象。通常使用两种方式完后依赖注入,一、构造方法注入请求对象,二、操作方法注入请求对象

1.1 构造方法注入

控制器:

  1. <?php
  2. namespace app\test\controller;
  3. use think\Request;
  4. class Inject
  5. {
  6. /**
  7. * 构造方法注入请求对象
  8. */
  9. // 用来保存 think\Request 的实例
  10. protected $request;
  11. // 构造方法
  12. public function __construct(Request $req)
  13. {
  14. $this->request = $req;
  15. }
  16. // 默认action
  17. public function index()
  18. {
  19. // 返回请求的参数,查询字符串中 name 对应的值
  20. return $this->request->param('name');
  21. }
  22. }

postman 访问测试:
image.png

1.2 继承基类 think\Controller

直接继承于基类 think\Controller ,系统已经自动完成了请求对象的构造方法注入了,你可以直接使用$this->request属性调用当前的请求对象。注意:这里有一点需要我们特别注意,继承的是 基类Controller而不是基类Request,这一点很容易弄错。

控制器:

  1. <?php
  2. namespace app\test\controller;
  3. use think\Controller;
  4. class Inject2 extends Controller
  5. {
  6. public function index()
  7. {
  8. return $this->request->method();
  9. }
  10. }

postman 测试效果:
image.png

1.3 操作方法注入

这种使用方式是最为常见的使用方式

控制器:

  1. <?php
  2. namespace app\test\controller;
  3. use think\Request;
  4. class Inject3
  5. {
  6. public function index(Request $req)
  7. {
  8. return $req->ip();
  9. }
  10. }

postman 测试:
image.png


2. Facade 类调用

如果不使用依赖注入和继承controller基类的方式,那么使用 Facade 静态调用也是比较常见的

控制器:

  1. <?php
  2. namespace app\test\controller;
  3. use think\facade\Request;
  4. class Inject4
  5. {
  6. public function index()
  7. {
  8. return Request::url();
  9. }
  10. }

postman 测试:
image.png


3. 助手函数

使用提供的助手函数,在任何时候都可以调用到请求对象

  1. <?php
  2. namespace app\test\controller;
  3. class Inject5
  4. {
  5. public function index()
  6. {
  7. return request()->method();
  8. }
  9. }

postman 测试:
image.png