SubsiteService.php 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. <?php
  2. namespace App\Services;
  3. use App\Repositories\SubsiteRepository;
  4. use App\Repositories\TplRepository;
  5. use Illuminate\Support\Facades\Cache;
  6. class SubsiteService
  7. {
  8. /**
  9. * @var SubsiteRepository
  10. */
  11. private $subsiteRepository;
  12. private $tplRepository;
  13. /**
  14. * SubsiteService constructor.
  15. * @param SubsiteRepository $subsiteRepository
  16. */
  17. public function __construct(SubsiteRepository $subsiteRepository, TplRepository $tplRepository)
  18. {
  19. $this->subsiteRepository = $subsiteRepository;
  20. $this->tplRepository = $tplRepository;
  21. }
  22. public function getSiteId()
  23. {
  24. $site_module = explode('.', request()->server('HTTP_HOST'))[0];
  25. $subsite_array = $this->getSiteDomain();
  26. if (!empty($subsite_array[$site_module])) {
  27. return $subsite_array[$site_module];
  28. }
  29. return 0;
  30. /*$main_domain_lenth=count(explode('.', config('app.url')));
  31. $host_array=explode('.', request()->getHost());
  32. //域名最多两级且最后一级只能是www: www.aa.bb.cc.91caiqing.com(主域名就是bb.cc.91caiqing.com)
  33. if (count($host_array)>($main_domain_lenth + 2)) {
  34. return false;
  35. }
  36. if (count($host_array) == ($main_domain_lenth + 2) && $host_array[0] != 'www') {
  37. return false;
  38. }
  39. //主站
  40. if (count($host_array) == $main_domain_lenth || (count($host_array) == ($main_domain_lenth + 1) && $host_array[0] == 'www')) {
  41. return 0;
  42. }
  43. //分站
  44. $subsite_array=$this->getSiteDomain();
  45. if (count($host_array) == ($main_domain_lenth + 2) && $host_array[0] == 'www') {
  46. $sub_domain=$host_array[1];
  47. return isset($subsite_array[$sub_domain])?$subsite_array[$sub_domain]:false;
  48. }
  49. $sub_domain=$host_array[0];
  50. return isset($subsite_array[$sub_domain])?$subsite_array[$sub_domain]:0;*/
  51. }
  52. public function getSubsite($user)
  53. {
  54. $default = ['id' => 0, 'sitename' => '总站', 'domain' => config('app.url')];
  55. $subsite = $this->subsiteRepository->getSubsite();
  56. if ($user->subsite_id == 0) {
  57. return $subsite;
  58. } else {
  59. foreach ($subsite as $key => $val) {
  60. if ($user->subsite_id == $val['id']) {
  61. unset($subsite[$key]);
  62. }
  63. }
  64. array_unshift($subsite, $default);
  65. return $subsite;
  66. }
  67. }
  68. public function getAllSubsite()
  69. {
  70. $subsites = Cache::get('subsites_list');
  71. if (is_null($subsites)) {
  72. $subsites[0] = ['id' => 0, 'sitename' => '总站', 'domain' => config('app.url')];
  73. $list = $this->subsiteRepository->getSubsite();
  74. if (!$list) {
  75. return null;
  76. }
  77. foreach ($list as $value) {
  78. $subsites[$value['id']] = $value;
  79. }
  80. Cache::forever('subsites_list', $subsites);
  81. }
  82. return $subsites;
  83. }
  84. public function getSubsiteDomain($subsite_id = 0)
  85. {
  86. $app_url = config('app.url');
  87. if ($subsite_id > 0) {
  88. $subsites = $this->getAllSubsite();
  89. $subsite = $subsites[$subsite_id];
  90. $host = explode('.', parse_url($app_url)['host']);
  91. $app_url = str_replace('://' . $host[0], '://' . $subsite['domain'], $app_url);
  92. }
  93. if (!empty(request()->route()) && is_mobile_route()) {
  94. $app_url .= "/mobile";
  95. }
  96. return $app_url;
  97. }
  98. public function getSiteDomain()
  99. {
  100. $sub_array = Cache::get('subsites_domain');
  101. if (is_null($sub_array)) {
  102. $sub_array = $this->subsiteRepository->getSiteDomain();
  103. Cache::forever('subsites_domain', $sub_array);
  104. }
  105. return $sub_array;
  106. }
  107. public function getSubsiteConfig($key, $default = null, $subsite_id = null)
  108. {
  109. $subsite_id = is_null($subsite_id) ? $this->getSiteId() : $subsite_id;
  110. if ($subsite_id == 0) {
  111. return config($key, $default);
  112. } else {
  113. $key_array = explode('.', $key);
  114. $subsite_array = $this->getAllSubsite();
  115. $value = array_get($subsite_array[$subsite_id], end($key_array), $default);
  116. if (empty($value) && !is_numeric($value)) {
  117. return config($key, $default);
  118. }
  119. return $value;
  120. }
  121. }
  122. //获取模板名称
  123. public function getSubsiteTpl($subsite_id)
  124. {
  125. $subsites = $this->getAllSubsite();
  126. if ($subsite_id) {
  127. if (array_has($subsites, $subsite_id)) {
  128. $sub_info = $subsites[$subsite_id];
  129. if (array_has($sub_info, 'tpl')) {
  130. $tpl_id = $sub_info['tpl'];
  131. $tpl_where = ['id' => $tpl_id, 'display' => 1];
  132. $tpl_info = $this->tplRepository->getDefaultTpl($tpl_where);
  133. if ($tpl_info) {
  134. return $tpl_info->blade_name;
  135. }
  136. }
  137. }
  138. }
  139. return '';
  140. }
  141. }