老莫的笔记本  
  
查看: 1010|回复: 0

TP5 请求对象 实现属性注入与方法注入 跨控制器调用

[复制链接]

662

主题

878

帖子

5145

积分

超级版主

Rank: 8Rank: 8

积分
5145
发表于 2018-8-9 23:18:44 | 显示全部楼层 |阅读模式
本帖最后由 周大胖子 于 2018-8-9 23:21 编辑

这玩意干啥的呢,其实吧 就是在 app/common.php  文件中给请求对象 注入点属性和方法,然后各个模块、控制器都可以调用
不说啥,贴代码吧  老师讲的太差了!全是漏洞!就这还是官方视频!【后期有空 需要补补】属性注入: \think\Request::instance()->属性
方法注入: \think\Request::hook('方法','对应函数')
  1. <?php
  2. namespace app\articles\controller;
  3. class Sets extends \think\Controller
  4. {
  5.     public function mk1($a)
  6.     {
  7.         // request  就是请求对象 跨操作的数据共享
  8.         return $this->request->param('a');
  9.     }
  10.     public function mk2()
  11.     {
  12.         return $this->request->param('a');
  13.     }
  14.     // 我觉得视频上讲错了
  15.     // 视频上的测试是这样的:  利用以下两个链接来证明 恭喜了变量 扯淡呢! 虽然我没闹明白下面怎么对的 但是他的讲解一定是错的
  16.     // http://localhost/public/index.php/articles/sets/mk1/a/242
  17.     // http://localhost/public/index.php/articles/sets/mk2/a/242
  18.     // 记个笔记: 给请求对象注入的自定义属性和方法,与原请求对象中的属性与方法是同级的,所以在整个应用的生命周期内都是有效的
  19.      public function mk3()
  20.     {
  21.         return '我成功进来了    }
  22.     public function mk4()
  23.     {
  24.         // 判断是否有值  视频里这个讲解也是错的 请看下方质疑1
  25.         if($this->request->has('a','get')){
  26.             return $this->request->param('a');      //如果有 就输出该值
  27.         }else{
  28.             return '没有值        }
  29.     }
  30.     public function mk5()
  31.     {
  32.         // 查看在请求对象中注入的属性 可跨控制器查看
  33.         return $this->request->sitename;
  34.     }
  35.     public function mk6()
  36.     {
  37.         // 查看在请求对象中注入的方法可跨控制器/跨模块查看 【是不是搞笑 不能跨还叫应用公共文件啊】
  38.         return $this->request->getSiteName();
  39.     }
  40.     //质疑1. $this->request->has('name','get') 这第二个参数是判定是否通过get方法传入的,你都是通过pathinfo方式传入的,肯定失败,而且你都没传参数进去。 $this->request->param('name') 访问都是request类下的param方法,跟那个什么控制器都没关系.
  41.     // 怎么给请求对象注入属性
  42.     // 第一步:打开应用公共文件 -》 app;ocation/common.php  后面步骤注释在该文件
  43. }
复制代码

再贴一个应用公共文件的
  1. <?php
  2. // 应用公共文件
  3. //给请求对象注入自定义属性与方法  第二步  应用当前请求对象的命名空间
  4. use think\Request;
  5. // 第三步 返回请求对象的实例 通过 Request::instance(); 这个 request 可以换
  6. $request =Request::instance();
  7. // 第四步: 请求对象的属性注入
  8. $request->sitename = 'PHPhhhh
  9. // 第五步 请求对象方法的注入
  10. // 5.1 创建一个请求函数,绑定到当前请求对象的方法上
  11. function getSiteName(Request $request)  //第一个参数必须是 request 类型的变量
  12. {
  13.     return '站点名称:' .$request->sitename;
  14. }
  15. // 5.2 注册请求对象的方法, 也叫钩子
  16. Request::hook('getSiteName','getSiteName');   // 参数一 注册名称 可以随便改    参数二方法名称
复制代码

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表