model = new Location; } /** * 浏览 * @return Response */ public function index(): Response { // 获取当前语言 $lang = session('lang', 'zh-cn'); // 加载语言文件 $location_translations = include __DIR__ . "/../lang/{$lang}/location.php"; $common_translations = include __DIR__ . "/../lang/{$lang}/common.php"; // 合并翻译 $translations = array_merge($location_translations, $common_translations); return view('location/index', [ 'lang' => $lang, 'translations' => $translations ]); } /** * 查询后置处理,添加位置信息 * @param mixed $items * @return mixed */ protected function afterQuery($items) { $lang = session('lang', 'zh-cn'); switch ($lang) { case 'zh-cn': $location = new \app\model\Location(); break; case 'en': $location = new \app\model\LocationEn(); break; case 'ru': $location = new \app\model\LocationRu(); break; case 'ar': $location = new \app\model\LocationAr(); break; } foreach ($items as &$item) { $item = $location::find($item['id']); } return $items; } /** * 插入 * @param Request $request * @return Response * @throws BusinessException */ public function insert(Request $request): Response { // 获取当前语言 $lang = session('lang', 'zh-cn'); // 加载语言文件 $location_translations = include __DIR__ . "/../lang/{$lang}/location.php"; $common_translations = include __DIR__ . "/../lang/{$lang}/common.php"; // 合并翻译 $translations = array_merge($location_translations, $common_translations); // 如果是 POST 请求,处理数据保存和翻译 if ($request->method() === 'POST') { $this->save($request); // // 获取表单数据 // $data = $request->all(); // Log::info('location',$data); // // // 保存主表数据 // $location = new Location(); // $location->fill($data); // $location->save(); // // // 处理多语言翻译 // $languages = ['en', 'ar', 'ru']; // $translationModels = [ // 'en' => \app\model\LocationEn::class, // 'ar' => \app\model\LocationAr::class, // 'ru' => \app\model\LocationRu::class // ]; // // // 创建翻译服务实例 // $translatorService = new \app\service\TranslatorService(); // // foreach ($languages as $lang) { // $translationModel = $translationModels[$lang]; // $translation = new $translationModel(); // // // 复制主表数据 // $translation->fill($data); // $translation->id = $location->id; // // // 使用翻译服务处理需要翻译的字段 // $translatedData = $translatorService->location($data, $lang); // // // 更新翻译后的字段 // $translation->name = $translatedData['name'] ?? $data['name']; //// $translation->description = $translatedData['description'] ?? $data['description']; // // Log::info('location:'.$lang.':translatedData',$translatedData); // $translation->save(); // } } return view('location/insert', [ 'lang' => $lang, 'translations' => $translations ]); } /** * 保存 */ public function save(Request $request) { // 获取表单数据 $data = $request->all(); $lang = session('lang', 'zh-cn'); $locationModel = $this->getModel($lang); // 保存主表数据 if(!empty($data['id'])){ $location = $locationModel::find($data['id']); }else{ $location = $locationModel; } $location->fill($data); $location->save(); // 处理多语言翻译 $languages = ['zh-cn' => 'cn', 'en' => 'en', 'ar' => 'ar', 'ru' => 'ru']; $translationModels = [ 'cn' => \app\model\Location::class, 'en' => \app\model\LocationEn::class, 'ar' => \app\model\LocationAr::class, 'ru' => \app\model\LocationRu::class ]; //删除已保存的模型 unset($translationModels[$lang]); // unset($languages[$lang]); // 创建翻译服务实例 $translatorService = new \app\service\TranslatorService(); $translatorService->queue($data,$languages[$lang],'location',$data['id']?:null); } /** * 更新 * @param Request $request * @return Response * @throws BusinessException */ public function update(Request $request): Response { if ($request->method() === 'POST') { // return parent::update($request); $this->save($request); } // 获取当前语言 $lang = session('lang', 'zh-cn'); // 加载语言文件 $location_translations = include __DIR__ . "/../lang/{$lang}/location.php"; $common_translations = include __DIR__ . "/../lang/{$lang}/common.php"; // 合并翻译 $translations = array_merge($location_translations, $common_translations); return view('location/update', [ 'lang' => $lang, 'translations' => $translations ]); } // public function updateLogistics(Request $request): Response // { // return $this->update($request); // } /** * 获取下拉选项接口 */ public function getAll() { $lang = session('lang', 'zh-cn'); $hz = $this->getModel($lang); $locations = $hz::get(); return Util::success($locations); } /** * @param $lang * @return \app\model\Location|\app\model\LocationAr|\app\model\LocationEn|\app\model\LocationRu */ protected function getModel($lang){ switch ($lang) { case 'en': $hz = new \app\model\LocationEn(); break; case 'ru': $hz = new \app\model\LocationRu(); break; case 'ar': $hz = new \app\model\LocationAr(); break; default: $hz = new \app\model\Location(); break; } return $hz; } }