$menu) { $allMenu[$key] = ArrayHelper::regroupMapToArr($menu); } $time = time(); foreach ($allMenu as $key => $item) { foreach ($item as $k => $value) { $listeners = Json::encode($value['listeners']); $event = AddonsEvent::findOne(['addons_name' => $addons_name, 'event_name' => $value['event_name']]); if ($event) { if (Json::encode($event['listeners']) != $listeners) { $event->listeners = $value['listeners']; $event->save(); } } else { $row = []; $row['addons_name'] = $addons_name; $row['event_name'] = $value['event_name'] ?? []; $row['listeners'] = $listeners; $row['created_at'] = $time; $row['updated_at'] = $time; $rows[] = $row; } } } if (empty($rows)) return true; $field = ['addons_name', 'event_name', 'listeners', 'created_at', 'updated_at']; // 批量插入数据 $res = Yii::$app->db->createCommand()->batchInsert(AddonsEvent::tableName(), $field, $rows)->execute(); if (!$res) throw new Exception("事件创建失败"); return true; } catch (Exception $e) { $this->error = $e->getMessage(); return false; } } /** * 获取插件全局事件 * @Author: lun * @DateTime: 2021/10/15 0015 15:54 * @Copyright: copyright (c) 2021 广东七件事集团 * @param array $mainEvent 主事件 * @param string $eventName 事件名称 * @return array */ public static function event(array $mainEvent, string $eventName) { $cache = Yii::$app->cache; $cache_key = RedisKeyEnum::suffix('EVENT_', $eventName ); $event = $cache->get($cache_key);// 获取缓存中的事件数据 // 缓存无数据则对表进行查询 if (empty($event)) { $event = []; $event_list = AddonsEvent::getAddonsEvent([['event_name' => $eventName]],[],true,'listeners'); if ($event_list) { // 循环组合对应事件的监听地址 foreach ($event_list as $listeners) { $listenerArr = Json::decode($listeners['listeners'], true); foreach ($listenerArr as $listener) { $event[] = $listener; } } if ($event) $cache->set($cache_key, $event);// 保存至缓存 } } // 跟主事件合并返回注册事件 return array_merge($mainEvent, $event); } }