InitRoute.php 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. <?php
  2. /**
  3. * Niushop商城系统 - 团队十年电商经验汇集巨献!
  4. * =========================================================
  5. * Copy right 2019-2029 上海牛之云网络科技有限公司, 保留所有权利。
  6. * ----------------------------------------------
  7. * 官方网址: https://www.niushop.com.cn
  8. * 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和使用。
  9. * 任何企业和个人不允许对程序代码以任何形式任何目的再发布。
  10. * =========================================================
  11. */
  12. namespace app\event;
  13. use think\app\Service;
  14. use think\facade\Route;
  15. use app\model\system\Addon;
  16. use think\facade\Cache;
  17. use app\model\web\WebSite;
  18. /**
  19. * 初始化路由规则
  20. * @author Administrator
  21. *
  22. */
  23. class InitRoute extends Service
  24. {
  25. public function handle()
  26. {
  27. if (defined('BIND_MODULE') && BIND_MODULE === 'install')
  28. return;
  29. define("initroute_tag", 1);
  30. //检测当前pathinfo
  31. $system_array = ['admin', 'shop', 'install', 'cron', 'api', 'pay', 'public', 'app', 'index'];
  32. $pathinfo = request()->pathinfo();
  33. $pathinfo_array = explode('/', $pathinfo);
  34. $url = request()->domain();
  35. $check_model = $pathinfo_array[0];
  36. //检测当前插件情况
  37. $addon = in_array($check_model, $system_array) ? '' : $check_model;
  38. if (!empty($addon)) {
  39. $module = isset($pathinfo_array[1]) ? $pathinfo_array[1] : 'admin';
  40. $controller = isset($pathinfo_array[2]) ? $pathinfo_array[2] : 'index';
  41. $method = isset($pathinfo_array[3]) ? $pathinfo_array[3] : 'index';
  42. request()->addon($addon);
  43. $this->app->setNamespace("addon\\" . $addon . '\\' . $module);
  44. $this->app->setAppPath($this->app->getRootPath() . 'addon' . DIRECTORY_SEPARATOR . $addon . DIRECTORY_SEPARATOR . $module . DIRECTORY_SEPARATOR);
  45. } else {
  46. $module = isset($pathinfo_array[0]) ? $pathinfo_array[0] : 'admin';
  47. $controller = isset($pathinfo_array[1]) ? $pathinfo_array[1] : 'index';
  48. $method = isset($pathinfo_array[2]) ? $pathinfo_array[2] : 'index';
  49. $this->app->setNamespace("app\\" . $module);
  50. $this->app->setAppPath($this->app->getRootPath() . 'app' . DIRECTORY_SEPARATOR . $module . DIRECTORY_SEPARATOR);
  51. }
  52. //解析路由
  53. $pathinfo = str_replace(".html", '', $pathinfo);
  54. $controller = str_replace(".html", '', $controller);
  55. $method = str_replace(".html", '', $method);
  56. request()->module($module);
  57. Route::rule($pathinfo, $module . '/' . $controller . '/' . $method);
  58. }
  59. }