|
本帖最后由 周大胖子 于 2018-8-9 23:21 编辑
这玩意干啥的呢,其实吧 就是在 app/common.php 文件中给请求对象 注入点属性和方法,然后各个模块、控制器都可以调用
不说啥,贴代码吧 老师讲的太差了!全是漏洞!就这还是官方视频!【后期有空 需要补补】属性注入: \think\Request::instance()->属性
方法注入: \think\Request::hook('方法','对应函数')
- <?php
- namespace app\articles\controller;
- class Sets extends \think\Controller
- {
- public function mk1($a)
- {
- // request 就是请求对象 跨操作的数据共享
- return $this->request->param('a');
- }
- public function mk2()
- {
- return $this->request->param('a');
- }
- // 我觉得视频上讲错了
- // 视频上的测试是这样的: 利用以下两个链接来证明 恭喜了变量 扯淡呢! 虽然我没闹明白下面怎么对的 但是他的讲解一定是错的
- // http://localhost/public/index.php/articles/sets/mk1/a/242
- // http://localhost/public/index.php/articles/sets/mk2/a/242
- // 记个笔记: 给请求对象注入的自定义属性和方法,与原请求对象中的属性与方法是同级的,所以在整个应用的生命周期内都是有效的
- public function mk3()
- {
- return '我成功进来了 }
- public function mk4()
- {
- // 判断是否有值 视频里这个讲解也是错的 请看下方质疑1
- if($this->request->has('a','get')){
- return $this->request->param('a'); //如果有 就输出该值
- }else{
- return '没有值 }
- }
- public function mk5()
- {
- // 查看在请求对象中注入的属性 可跨控制器查看
- return $this->request->sitename;
- }
- public function mk6()
- {
- // 查看在请求对象中注入的方法可跨控制器/跨模块查看 【是不是搞笑 不能跨还叫应用公共文件啊】
- return $this->request->getSiteName();
- }
- //质疑1. $this->request->has('name','get') 这第二个参数是判定是否通过get方法传入的,你都是通过pathinfo方式传入的,肯定失败,而且你都没传参数进去。 $this->request->param('name') 访问都是request类下的param方法,跟那个什么控制器都没关系.
- // 怎么给请求对象注入属性
- // 第一步:打开应用公共文件 -》 app;ocation/common.php 后面步骤注释在该文件
- }
复制代码
再贴一个应用公共文件的- <?php
- // 应用公共文件
- //给请求对象注入自定义属性与方法 第二步 应用当前请求对象的命名空间
- use think\Request;
- // 第三步 返回请求对象的实例 通过 Request::instance(); 这个 request 可以换
- $request =Request::instance();
- // 第四步: 请求对象的属性注入
- $request->sitename = 'PHPhhhh
- // 第五步 请求对象方法的注入
- // 5.1 创建一个请求函数,绑定到当前请求对象的方法上
- function getSiteName(Request $request) //第一个参数必须是 request 类型的变量
- {
- return '站点名称:' .$request->sitename;
- }
- // 5.2 注册请求对象的方法, 也叫钩子
- Request::hook('getSiteName','getSiteName'); // 参数一 注册名称 可以随便改 参数二方法名称
复制代码
|
|