Hook.php 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | 海豚PHP框架 [ DolphinPHP ]
  4. // +----------------------------------------------------------------------
  5. // | 版权所有 2016~2017 河源市卓锐科技有限公司 [ http://www.zrthink.com ]
  6. // +----------------------------------------------------------------------
  7. // | 官方网站: http://dolphinphp.com
  8. // +----------------------------------------------------------------------
  9. // | 开源协议 ( http://www.apache.org/licenses/LICENSE-2.0 )
  10. // +----------------------------------------------------------------------
  11. namespace app\common\behavior;
  12. use app\admin\model\Hook as HookModel;
  13. use app\admin\model\HookPlugin as HookPluginModel;
  14. use app\admin\model\Plugin as PluginModel;
  15. use think\facade\Cache;
  16. /**
  17. * 注册钩子
  18. * @package app\common\behavior
  19. * @author 蔡伟明 <314013107@qq.com>
  20. */
  21. class Hook
  22. {
  23. /**
  24. * 执行行为 run方法是Behavior唯一的接口
  25. * @throws \think\db\exception\DataNotFoundException
  26. * @throws \think\db\exception\ModelNotFoundException
  27. * @throws \think\exception\DbException
  28. */
  29. public function run()
  30. {
  31. if(defined('BIND_MODULE') && BIND_MODULE === 'install') return;
  32. $hook_plugins = Cache::get('hook_plugins');
  33. $hooks = Cache::get('hooks');
  34. $plugins = Cache::get('plugins');
  35. if (!$hook_plugins) {
  36. // 所有钩子
  37. $hooks = HookModel::where('status', 1)->column('status', 'name');
  38. // 所有插件
  39. $plugins = PluginModel::where('status', 1)->column('status', 'name');
  40. // 钩子对应的插件
  41. $hook_plugins = HookPluginModel::where('status', 1)->order('hook,sort')->select();
  42. // 非开发模式,缓存数据
  43. if (config('develop_mode') == 0) {
  44. Cache::set('hook_plugins', $hook_plugins);
  45. Cache::set('hooks', $hooks);
  46. Cache::set('plugins', $plugins);
  47. }
  48. }
  49. if ($hook_plugins) {
  50. foreach ($hook_plugins as $value) {
  51. if (isset($hooks[$value['hook']]) && isset($plugins[$value['plugin']])) {
  52. if ($value['hook'] == 'upload_attachment') {
  53. if (strtolower(parse_name(config('upload_driver'), 1)) == strtolower($value['plugin'])) {
  54. \think\facade\Hook::add($value['hook'], get_plugin_class($value['plugin']));
  55. }
  56. } else {
  57. \think\facade\Hook::add($value['hook'], get_plugin_class($value['plugin']));
  58. }
  59. }
  60. }
  61. }
  62. }
  63. }