tp5类的属性不存在_TP5的请求对象的属性与方法注入

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

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

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

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

namespace app\index\controller

class Index extends \think\Controller

{

public function index()

{

return '

欢迎来到PHP中文网

';

}

public function demo1($name)

{

return $name; //可以返回$name

}

public function demo2() //这里没有传入$name

{

return $name; //所以无法返回$name

}

}

?>

更改:

namespace app\index\controller

class Index extends \think\Controller

{

public function index()

{

return '

欢迎来到PHP中文网

';

}

public function demo1($name)

{

return $this->request->param('name'); //可以返回$name

}

public function demo2() //这里没有传入$name

{

return $this->request->param('name'); //可以返回$name

}

}

?>

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

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

比如,在controller中新建Demo.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文件中:

use think\Request;

$request = Request::instance();

//请求对象的属性注入

$request->siteName = 'PHP中文网';

?>

//请求对象的方法注入

function getSiteName(Request $request) //第一个参数必须是Request类型的变量

{

return '站点名称:'.$request->siteName;

}

//注册请求对象的方法,也叫钩子

Request::hook('getSiteName','getiSiteName');

然后在index.php中:

namespace app\index\controller

class Index extends \think\Controller

{

public function index()

{

return '

欢迎来到PHP中文网

';

}

public function demo1()

{

return $this->request->siteName;

}

public function demo2()

{

return $this->request->getSiteName();

}

}

?>

可以使用。

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

namespace app\index\controller

class Demo extends \think\Controller

{

public function demo1()

{

return $this->request->siteName;

}

public function demo2()

{

return $this->request->getSiteName();

}

}

?>

测试成功

同理,在其他模块里也能用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值