InitAddon.php 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. <?php
  2. /**
  3. * Niushop商城系统 - 团队十年电商经验汇集巨献!
  4. * =========================================================
  5. * Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
  6. * ----------------------------------------------
  7. * 官方网址: https://www.niushop.com
  8. * =========================================================
  9. */
  10. namespace app\event;
  11. use app\model\system\Addon;
  12. use think\facade\Event;
  13. use think\facade\Cache;
  14. /**
  15. * 初始化插件
  16. */
  17. class InitAddon
  18. {
  19. // 行为扩展的执行入口必须是run
  20. public function handle()
  21. {
  22. if (defined('BIND_MODULE') && BIND_MODULE === 'install') return;
  23. $this->initEvent();
  24. }
  25. /**
  26. * 初始化事件
  27. */
  28. private function InitEvent()
  29. {
  30. $cache = Cache::get("addon_event_list");
  31. if (!defined("initroute_tag")) exit();
  32. if (empty($cache)) {
  33. $addon_model = new Addon();
  34. $addon_data = $addon_model->getAddonList([], 'name');
  35. $listen_array = [];
  36. foreach ($addon_data[ 'data' ] as $k => $v) {
  37. if (file_exists('addon/' . $v[ 'name' ] . '/config/event.php')) {
  38. $addon_event = require_once 'addon/' . $v[ 'name' ] . '/config/event.php';
  39. $listen = isset($addon_event[ 'listen' ]) ? $addon_event[ 'listen' ] : [];
  40. if (!empty($listen)) {
  41. $listen_array[] = $listen;
  42. }
  43. }
  44. }
  45. Cache::tag("addon")->set("addon_event_list", $listen_array);
  46. } else {
  47. $listen_array = $cache;
  48. }
  49. if (!empty($listen_array)) {
  50. foreach ($listen_array as $k => $listen) {
  51. if (!empty($listen)) {
  52. Event::listenEvents($listen);
  53. }
  54. }
  55. }
  56. }
  57. }