HookService.php 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. <?php
  2. /**
  3. *
  4. * @author: xaboy<365615158@qq.com>
  5. * @day: 2017/11/24
  6. */
  7. namespace service;
  8. use think\Exception;
  9. use think\Hook;
  10. use think\Loader;
  11. class HookService
  12. {
  13. /**
  14. * 监听有返回结果的行为
  15. * @param $tag
  16. * @param $params
  17. * @param null $extra
  18. * @param bool $once
  19. * @return mixed
  20. */
  21. public static function resultListen($tag, $params, $extra = null, $once = false,$behavior = null)
  22. {
  23. self::beforeListen($tag,$params,$extra,false,$behavior);
  24. return self::listen($tag,$params,$extra,$once,$behavior);
  25. }
  26. /**
  27. * 监听后置行为
  28. * @param $tag
  29. * @param $params
  30. * @param null $extra
  31. */
  32. public static function afterListen($tag, $params, $extra = null, $once = false, $behavior = null)
  33. {
  34. try{
  35. return self::listen($tag.'_after',$params,$extra,$once,$behavior);
  36. }catch (\Exception $e){}
  37. }
  38. public static function beforeListen($tag,$params,$extra = null, $once = false, $behavior = null)
  39. {
  40. try{
  41. return self::listen($tag.'_before',$params,$extra,$once,$behavior);
  42. }catch (\Exception $e){}
  43. }
  44. /**
  45. * 监听行为
  46. * @param $tag
  47. * @param $params
  48. * @param null $extra
  49. * @param bool $once
  50. * @return mixed
  51. */
  52. public static function listen($tag, $params, $extra = null, $once = false, $behavior = null)
  53. {
  54. if($behavior && method_exists($behavior,Loader::parseName($tag,1,false))) self::add($tag,$behavior);
  55. return Hook::listen($tag,$params,$extra,$once);
  56. }
  57. /**
  58. * 添加前置行为
  59. * @param $tag
  60. * @param $behavior
  61. * @param bool $first
  62. */
  63. public static function addBefore($tag, $behavior, $first = false)
  64. {
  65. self::add($tag.'_before',$behavior,$first);
  66. }
  67. /**
  68. * 添加后置行为
  69. * @param $tag
  70. * @param $behavior
  71. * @param bool $first
  72. */
  73. public static function addAfter($tag, $behavior, $first = false)
  74. {
  75. self::add($tag.'_after',$behavior,$first);
  76. }
  77. /**
  78. * 添加行为
  79. * @param $tag
  80. * @param $behavior
  81. * @param bool $first
  82. */
  83. public static function add($tag, $behavior, $first = false)
  84. {
  85. Hook::add($tag,$behavior,$first);
  86. }
  87. }