AddonsBindingService.php 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. <?php
  2. namespace services\common;
  3. use Yii;
  4. use yii\helpers\Json;
  5. use common\components\Service;
  6. use common\helpers\ArrayHelper;
  7. use common\models\common\AddonsBinding;
  8. use common\helpers\StringHelper;
  9. /**
  10. *
  11. * Class AddonsBindingService
  12. * @package services\common
  13. * @author qimall
  14. */
  15. class AddonsBindingService extends Service
  16. {
  17. /**
  18. * 创建菜单和入口
  19. *
  20. * @param array $allMenu
  21. * @param array $allCover
  22. * @param string $addons_name
  23. * @throws \yii\db\Exception
  24. */
  25. public function create(array $allMenu, array $allCover, string $addons_name)
  26. {
  27. AddonsBinding::deleteAll(['addons_name' => $addons_name]);
  28. // 重组数组
  29. foreach ($allMenu as $key => $menu) {
  30. $allMenu[$key] = ArrayHelper::regroupMapToArr($menu);
  31. }
  32. foreach ($allCover as $key => $cover) {
  33. $allCover[$key] = ArrayHelper::regroupMapToArr($cover);
  34. }
  35. $rows = [];
  36. foreach ($allCover as $key => $item) {
  37. foreach ($item as $k => $value) {
  38. $row = [];
  39. $row['title'] = $value['title'] ?? '';
  40. $row['route'] = $value['route'] ?? '';
  41. $row['icon'] = $value['icon'] ?? '';
  42. $row['params'] = $value['params'] ?? [];
  43. $row['app_id'] = $key;
  44. $row['entry'] = 'cover';
  45. $row['addons_name'] = $addons_name;
  46. $row['params'] = Json::encode($row['params']);
  47. $rows[] = $row;
  48. }
  49. }
  50. foreach ($allMenu as $key => $item) {
  51. foreach ($item as $k => $value) {
  52. $route = $value['route'] ?? '';
  53. $row = [];
  54. $row['title'] = $value['title'] ?? '';
  55. $row['route'] = '/' . StringHelper::toUnderScore($addons_name) . '/' . $route;
  56. $row['icon'] = $value['icon'] ?? '';
  57. $row['params'] = $value['params'] ?? [];
  58. $row['app_id'] = $key;
  59. $row['entry'] = 'menu';
  60. $row['addons_name'] = $addons_name;
  61. $row['params'] = Json::encode($row['params']);
  62. $rows[] = $row;
  63. }
  64. }
  65. $field = ['title', 'route', 'icon', 'params', 'app_id', 'entry', 'addons_name'];
  66. // 批量插入数据
  67. !empty($rows) && Yii::$app->db->createCommand()->batchInsert(AddonsBinding::tableName(), $field, $rows)->execute();
  68. }
  69. /**
  70. * @param array $names
  71. * @param string $entry
  72. * @return array|\yii\db\ActiveRecord[]
  73. */
  74. public function findByNames(array $names, $entry = 'menu')
  75. {
  76. return AddonsBinding::find()
  77. ->where(['entry' => $entry])
  78. ->andWhere(['in', 'addons_name', $names])
  79. ->asArray()
  80. ->all();
  81. }
  82. }