美文网首页ThinkPhp5入门
TP5的请求对象的属性与方法注入

TP5的请求对象的属性与方法注入

作者: 傲娇的泰迪 | 来源:发表于2018-01-12 09:06 被阅读0次

1、属性注入:\think\Request::instance()->属性

2、方法注入:\think\Request::hook('方法','对应函数')

作用:给当前请求对象绑定属性和方法,请求对象在应用的整个生命周期内都有效,不仅可以被当前所有控制器方法所共享,还可以跨控制器和模块进行调用。

app\index\index.php中的内容:

<?php
namespace app\index\controller
class Index extends \think\Controller
{
  public function index()
  {
    return '<h2>欢迎来到PHP中文网</h2>';
  } 
  public function demo1($name)
  {
    return $name; //可以返回$name
  }
  public function demo2() //这里没有传入$name
  {
    return $name; //所以无法返回$name
  }
}
?>

更改:

<?php
namespace app\index\controller
class Index extends \think\Controller
{
  public function index()
  {
    return '<h2>欢迎来到PHP中文网</h2>';
  } 
  public function demo1($name)
  {
    return $this->request->param('name'); //可以返回$name
  }
  public function demo2() //这里没有传入$name
  {
    return $this->request->param('name'); //可以返回$name
  }
}
?>

所以,通过调用请求对象中的某一个方法,可以实现请求变量的共享。

但是,当跨控制器、跨模块时,也是不能用的。

比如,在controller中新建Demo.php文件:

<?php
namespace app\index\controller
class Demo extends \think\Controller
{
  public function hello()
  {
    if($this->request->has('name','get')){
      return $this->request->param('name');
    } else {
      return '不存在';
    }
  }
}
?>

这时,会显示不存在。
我们可以使用对象注入的方式解决。

给请求对象注入的自定义属性与方法,与原请求对象中的属性与方法是同级的,所以在整个应用的生命周期内都是有效的。

首先,在当前应用的common.php文件中:

<?php
use think\Request;
$request = Request::instance();
//请求对象的属性注入
$request->siteName = 'PHP中文网';
?>

//请求对象的方法注入
function getSiteName(Request $request) //第一个参数必须是Request类型的变量
{
  return '站点名称:'.$request->siteName;
}
//注册请求对象的方法,也叫钩子
Request::hook('getSiteName','getiSiteName');

然后在index.php中:

<?php
namespace app\index\controller
class Index extends \think\Controller
{
  public function index()
  {
    return '<h2>欢迎来到PHP中文网</h2>';
  } 
  public function demo1()
  {
    return $this->request->siteName; 
  }
  public function demo2() 
  {
    return $this->request->getSiteName(); 
  }
}
?>

可以使用。
那再试试把demo1和demo2复制进Demo.php从,看看能不能跨控制器使用:

<?php
namespace app\index\controller
class Demo extends \think\Controller
{
  public function demo1()
  {
    return $this->request->siteName;
  }
  public function demo2()
  {
    return $this->request->getSiteName();
  }
}
?>

测试成功
同理,在其他模块里也能用。

相关文章

  • TP5的请求对象的属性与方法注入

    1、属性注入:\think\Request::instance()->属性 2、方法注入:\think\Reque...

  • thinkphp 请求

    请求对象由 think\Request 负责 只需要依赖注入即可 请求对象 构造方法注入即可 请求信息 输入网址 ...

  • spring3学习笔记(六)bean属性的注入

    什么是bean属性的注入 在创建对象的时候,向对象中注入相应的值 属性注入的方式 1 set方法进行注入(最常用)...

  • springboot之属性注入

    单个属性注入 application.yml 注入单个属性 对象属性注入 application.yml 注入对象...

  • IOC注入

    一 属性注入介绍1 创建对象时候,向类里面属性设置值。2 Java设置属性的三种方法(1) 使用set方法注入 (...

  • 33、TP5的请求对象与参数绑定

    1、请求变量与请求对象的关系? TP5提供了请求对象,对客户端发送的请求提供统一的接口进行处理,当用户向服务器发出...

  • Spring-DI

    使用构造器注入 使用属性setting方法进行注入 setter() 与init()方法的执行顺序 setter(...

  • DI

    使用构造器注入 使用属性setting方法进行注入 setter() 与init()方法的执行顺序 setter(...

  • 2018-08-26

    使用spring如何给对象注入Class类型的属性 使用spring如何给对象注入Class类型属性 POJO对象...

  • Tp5获取url请求对象的依赖注入

    方案一: 方案二: 继承父类

网友评论

    本文标题:TP5的请求对象的属性与方法注入

    本文链接:https://www.haomeiwen.com/subject/rslznxtx.html