Url.php 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. <?php
  2. namespace common\helpers;
  3. use Yii;
  4. use yii\helpers\BaseUrl;
  5. use common\enums\AppEnum;
  6. /**
  7. * Class Url
  8. * @package common\helpers
  9. * @author jianyan74 <751393839@qq.com>
  10. */
  11. class Url extends BaseUrl
  12. {
  13. /**
  14. * 生成模块Url
  15. *
  16. * @param array $url
  17. * @param bool $scheme
  18. * @return bool| string
  19. */
  20. public static function to($url = '', $scheme = false)
  21. {
  22. if (is_array($url) && !in_array(Yii::$app->id, [AppEnum::BACKEND, AppEnum::MERCHANT])) {
  23. $url = static::isMerchant($url);
  24. }
  25. // 插件默认加上
  26. if (is_array($url) && Yii::$app->params['inAddon'] && substr($url[0], 0, 1) == '/') {
  27. $name = '/' . Yii::$app->params['addonName'];
  28. if (substr($url[0], 0, strlen($name)) != $name) {
  29. $url[0] = $name . $url[0];
  30. }
  31. }
  32. return parent::to($url, $scheme);
  33. }
  34. /**
  35. * 生成前台链接
  36. *
  37. * @param array $url
  38. * @param bool $scheme
  39. * @return string
  40. * @throws \yii\base\InvalidConfigException
  41. */
  42. public static function toFront(array $url, $absolute = false, $scheme = false)
  43. {
  44. $domainName = Yii::getAlias('@frontendUrl');
  45. return static::create($url, $absolute, $scheme, $domainName, '', 'urlManagerFront');
  46. }
  47. /**
  48. * 生成微信链接
  49. *
  50. * @param array $url
  51. * @param bool $scheme
  52. * @return string
  53. * @throws \yii\base\InvalidConfigException
  54. */
  55. public static function toHtml5(array $url, $absolute = false, $scheme = false)
  56. {
  57. $domainName = Yii::getAlias('@html5Url');
  58. return static::create($url, $absolute, $scheme, $domainName, '/html5', 'urlManagerHtml5');
  59. }
  60. /**
  61. * 生成oauth2链接
  62. *
  63. * @param array $url
  64. * @param bool $scheme
  65. * @return string
  66. * @throws \yii\base\InvalidConfigException
  67. */
  68. public static function toOAuth2(array $url, $absolute = false, $scheme = false)
  69. {
  70. $domainName = Yii::getAlias('@oauth2Url');
  71. return static::create($url, $absolute, $scheme, $domainName, '/oauth2', 'urlManagerOAuth2');
  72. }
  73. /**
  74. * 生成oauth2链接
  75. *
  76. * @param array $url
  77. * @param bool $scheme
  78. * @return string
  79. * @throws \yii\base\InvalidConfigException
  80. */
  81. public static function toStorage(array $url, $absolute = false, $scheme = false)
  82. {
  83. $domainName = Yii::getAlias('@storageUrl');
  84. return static::create($url, $absolute, $scheme, $domainName, '/storage', 'urlManagerStorage');
  85. }
  86. /**
  87. * 生成Api链接
  88. *
  89. * @param array $url
  90. * @param bool $scheme
  91. * @return string
  92. * @throws \yii\base\InvalidConfigException
  93. */
  94. public static function toApi(array $url, $absolute = false, $scheme = false)
  95. {
  96. $domainName = Yii::getAlias('@apiUrl');
  97. return static::create($url, $absolute, $scheme, $domainName, '/api', 'urlManagerApi');
  98. }
  99. /**
  100. * 获取权限所需的url
  101. *
  102. * @param $url
  103. * @return string
  104. */
  105. public static function getAuthUrl($url)
  106. {
  107. return static::normalizeRoute($url);
  108. }
  109. /**
  110. * 创建支付回调专门Url
  111. *
  112. * @param string $action
  113. * @param array $url
  114. * @param bool $scheme
  115. * @return array
  116. */
  117. public static function removeMerchantIdUrl(string $action, array $url, $scheme = false)
  118. {
  119. $realAppId = Yii::$app->params['realAppId'];
  120. Yii::$app->params['realAppId'] = AppEnum::BACKEND;
  121. $url = self::$action($url, $scheme);
  122. Yii::$app->params['realAppId'] = $realAppId;
  123. return $url;
  124. }
  125. /**
  126. * @param $url
  127. * @param $scheme
  128. * @param $domainName
  129. * @param $appId
  130. * @param $key
  131. * @return string
  132. * @throws \yii\base\InvalidConfigException
  133. */
  134. protected static function create($url, $absolute, $scheme, $domainName, $appId, $key)
  135. {
  136. $url = static::isMerchant($url);
  137. Yii::$app->params['inAddon'] && $url = self::regroupUrl($url);
  138. if (!Yii::$app->has($key)) {
  139. Yii::$app->set($key, [
  140. 'class' => 'yii\web\urlManager',
  141. 'hostInfo' => !empty($domainName) ? $domainName : Yii::$app->request->hostInfo . $appId,
  142. 'scriptUrl' => '', // 代替'baseUrl'
  143. 'enablePrettyUrl' => true,
  144. 'showScriptName' => true,
  145. 'suffix' => '',// 静态
  146. ]);
  147. unset($domainName);
  148. }
  149. return urldecode(Yii::$app->$key->createAbsoluteUrl($url, $scheme));
  150. }
  151. /**
  152. * 重组url
  153. *
  154. * @param array $url 重组地址
  155. * @param array $addonsUrl 路由地址
  156. * @return array
  157. */
  158. protected static function regroupUrl($url)
  159. {
  160. if (!is_array($url)) {
  161. return $url;
  162. }
  163. $url[0] = Yii::$app->params['addonName'] . '/' . $url[0];
  164. return $url;
  165. }
  166. /**
  167. * @param array $url
  168. * @return array
  169. */
  170. protected static function isMerchant(array $url)
  171. {
  172. $merchant_id = Yii::$app->services->merchant->getId();
  173. if (Yii::$app->params['realAppId'] != AppEnum::BACKEND && !empty($merchant_id)) {
  174. $url = ArrayHelper::merge([
  175. 'merchant_id' => $merchant_id,
  176. ], $url);
  177. }
  178. return $url;
  179. }
  180. }
粤ICP备19079148号