LoadDistData.php 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. <?php
  2. namespace App\Http\Middleware;
  3. use App\Services\PreviewTemplateUpdater;
  4. use Closure;
  5. use Illuminate\Http\Request;
  6. use Symfony\Component\HttpFoundation\Response;
  7. use App\Helpers\SiteCache;
  8. use App\Services\TemplateUpdater;
  9. use App\Services\LiquidRenderer;
  10. /**
  11. * Class LoadDistData 用中间件来获取distm网店信息
  12. */
  13. class LoadDistData
  14. {
  15. /**
  16. * Handle an incoming request.
  17. *
  18. * @param
  19. */
  20. public function handle(Request $request, Closure $next): Response
  21. {
  22. // 获取请求的域名
  23. $domain = getHost();
  24. //$domain = 'internal-demo-site.mietubl.com.cn';
  25. // 从缓存中获取站点配置并反序列化
  26. $dist = SiteCache::getDist($domain);
  27. $dist = $dist ? unserialize($dist) : null;
  28. // 如果找不到匹配的数据,直接返回404响应
  29. if (!$dist) {
  30. abort(404, 'site not found.');
  31. }
  32. // 检查模板是否需要更新
  33. if(!empty($dist?->publishList?->template_update_code)) {
  34. if (
  35. !$dist?->publishList?->template_local_code ||
  36. $dist?->publishList?->template_update_code !== $dist?->publishList?->template_local_code
  37. ) {
  38. // dd('update template');
  39. // 更新模板
  40. TemplateUpdater::updateTemplates($dist);
  41. // 清除缓存并重新获取
  42. SiteCache::clearDistCache($domain);
  43. $dist = SiteCache::getDist($domain);
  44. $dist = $dist ? unserialize($dist) : null;
  45. if (!$dist) {
  46. abort(404, 'site not found.');
  47. }
  48. }
  49. }
  50. //补充domain
  51. $dist->domain=$domain;
  52. // 全局共享 数据
  53. app()->instance('dist', $dist);
  54. // 将找到的 dist 数据添加到请求中,方便后续使用
  55. //$request->attributes->set('dist', $dist);
  56. $menus_header=SiteCache::getMenu($domain,0,$dist->id);
  57. $menus_footer=SiteCache::getMenu($domain,1,$dist->id);
  58. app()->instance('menus_header', $menus_header);// 头部菜单
  59. app()->instance('menus_footer', $menus_footer);// 底部菜单
  60. $currentUrl = url()->current();
  61. $secureUrl = preg_replace('/^http:/i', 'https:', $currentUrl);
  62. app()->instance('current_url', $secureUrl);// 当前页面
  63. // 预览模式
  64. $preview = $request->get('mtb-preview');
  65. if ($preview) {
  66. $update = PreviewTemplateUpdater::updateTemplates($dist);
  67. if ($update) {
  68. die($update);
  69. }
  70. }
  71. // 预览模式结束
  72. return $next($request);
  73. }
  74. }