Jelajahi Sumber

调整获取code码不在抛出错误信息

liaofei 2 tahun lalu
induk
melakukan
666b7d1cd2
1 mengubah file dengan 62 tambahan dan 50 penghapusan
  1. 62 50
      crmeb/app/common.php

+ 62 - 50
crmeb/app/common.php

@@ -22,6 +22,7 @@ use app\services\system\lang\LangTypeServices;
 use app\services\system\lang\LangCodeServices;
 use app\services\system\lang\LangCountryServices;
 use think\facade\Config;
+use think\facade\Log;
 
 if (!function_exists('getWorkerManUrl')) {
 
@@ -922,61 +923,72 @@ if (!function_exists('getLang')) {
      */
     function getLang($code, array $replace = [])
     {
-        /** @var LangCountryServices $langCountryServices */
-        $langCountryServices = app()->make(LangCountryServices::class);
-        /** @var LangTypeServices $langTypeServices */
-        $langTypeServices = app()->make(LangTypeServices::class);
-        /** @var LangCodeServices $langCodeServices */
-        $langCodeServices = app()->make(LangCodeServices::class);
-
-        $request = app()->request;
-        //获取接口传入的语言类型
-        if (!$range = $request->header('cb-lang')) {
-            //没有传入则使用系统默认语言显示
-            $range = $langTypeServices->cacheDriver()->remember('range_name', function () use ($langTypeServices) {
-                return $langTypeServices->value(['is_default' => 1], 'file_name');
-            });
-            if (!$range) {
-                //系统没有设置默认语言的话,根据浏览器语言显示,如果浏览器语言在库中找不到,则使用简体中文
-                if ($request->header('accept-language') !== null) {
-                    $range = explode(',', $request->header('accept-language'))[0];
-                } else {
-                    $range = 'zh-CN';
+        //确保获取语言的时候不会报错
+        try {
+
+            /** @var LangCountryServices $langCountryServices */
+            $langCountryServices = app()->make(LangCountryServices::class);
+            /** @var LangTypeServices $langTypeServices */
+            $langTypeServices = app()->make(LangTypeServices::class);
+            /** @var LangCodeServices $langCodeServices */
+            $langCodeServices = app()->make(LangCodeServices::class);
+
+            $request = app()->request;
+            //获取接口传入的语言类型
+            if (!$range = $request->header('cb-lang')) {
+                //没有传入则使用系统默认语言显示
+                $range = $langTypeServices->cacheDriver()->remember('range_name', function () use ($langTypeServices) {
+                    return $langTypeServices->value(['is_default' => 1], 'file_name');
+                });
+                if (!$range) {
+                    //系统没有设置默认语言的话,根据浏览器语言显示,如果浏览器语言在库中找不到,则使用简体中文
+                    if ($request->header('accept-language') !== null) {
+                        $range = explode(',', $request->header('accept-language'))[0];
+                    } else {
+                        $range = 'zh-CN';
+                    }
                 }
             }
-        }
 
-        // 获取type_id
-        $typeId = $langCountryServices->cacheDriver()->remember('type_id_' . $range, function () use ($langCountryServices, $range) {
-            return $langCountryServices->value(['code' => $range], 'type_id') ?: 1;
-        }, 3600);
-
-        // 获取类型
-        $langData = CacheService::remember('lang_type_data', function () use ($langTypeServices) {
-            return $langTypeServices->getColumn(['status' => 1, 'is_del' => 0], 'file_name', 'id');
-        }, 3600);
-
-        // 获取缓存key
-        $langStr = 'lang_' . str_replace('-', '_', $langData[$typeId]);
-
-        //读取当前语言的语言包
-        $lang = CacheService::remember($langStr, function () use ($typeId, $range, $langCodeServices) {
-            return $langCodeServices->getColumn(['type_id' => $typeId, 'is_admin' => 1], 'lang_explain', 'code');
-        }, 3600);
-        //获取返回文字
-        $message = (string)($lang[$code] ?? 'Code Error');
-
-        //替换变量
-        if (!empty($replace) && is_array($replace)) {
-            // 关联索引解析
-            $key = array_keys($replace);
-            foreach ($key as &$v) {
-                $v = "{:{$v}}";
+            // 获取type_id
+            $typeId = $langCountryServices->cacheDriver()->remember('type_id_' . $range, function () use ($langCountryServices, $range) {
+                return $langCountryServices->value(['code' => $range], 'type_id') ?: 1;
+            }, 3600);
+
+            // 获取类型
+            $langData = CacheService::remember('lang_type_data', function () use ($langTypeServices) {
+                return $langTypeServices->getColumn(['status' => 1, 'is_del' => 0], 'file_name', 'id');
+            }, 3600);
+
+            // 获取缓存key
+            $langStr = 'lang_' . str_replace('-', '_', $langData[$typeId]);
+
+            //读取当前语言的语言包
+            $lang = CacheService::remember($langStr, function () use ($typeId, $range, $langCodeServices) {
+                return $langCodeServices->getColumn(['type_id' => $typeId, 'is_admin' => 1], 'lang_explain', 'code');
+            }, 3600);
+            //获取返回文字
+            $message = (string)($lang[$code] ?? 'Code Error');
+
+            //替换变量
+            if (!empty($replace) && is_array($replace)) {
+                // 关联索引解析
+                $key = array_keys($replace);
+                foreach ($key as &$v) {
+                    $v = "{:{$v}}";
+                }
+                $message = str_replace($key, $replace, $message);
             }
-            $message = str_replace($key, $replace, $message);
-        }
 
-        return $message;
+            return $message;
+        } catch (\Throwable $e) {
+            Log::error('获取语言code:' . $code . '发成错误,错误原因是:' . json_encode([
+                    'file' => $e->getFile(),
+                    'message' => $e->getMessage(),
+                    'line' => $e->getLine()
+                ]));
+            return $code;
+        }
     }
 }