fix(core): 레이아웃 코드 편집 화면 설명의 미해석 표기 노출 해소
파일 목록과 선택한 파일의 설명에 `$t:…` / `{{ … }}` 가 그대로 보였다.
설명 원문은 소유 템플릿의 다국어 키인데 응답 조립 시점에는 요청 템플릿의
사전만 열려 있어 다른 템플릿의 레이아웃을 편집하면 키를 찾지 못했다.
번역 실패가 예외 없이 원문 노출로 이어져 화면에만 나타났다.
목록·상세가 같은 규칙을 쓰도록 표시 해석을 App\Support\LayoutDescription 으로
모으고, 컨트롤러가 소유 템플릿 사전을 주입한다. 표현식이 섞인 설명과 번역을
찾지 못한 경우는 파일 이름으로 대체한다.
목록만 고치면 상세 헤더에 그대로 남는다 — 브라우저 실측에서 목록 수정 후에도
헤더가 새던 것을 확인해 상세 경로(LayoutResource)까지 함께 처리했다.
This commit is contained in:
1 parent
65378fdeb6
commit
e426498fb3
7 files changed
+244
-6
No files matched your search
@@ -49,9 +49,16 @@ class LayoutController extends AdminBaseController
|
||||
// 동기화 / 위지윅에서 넘어온 ?route= 로 해당 파일 복원에 사용한다.
|
||||
$routePathMap = $this->templateService->getLayoutRoutePathMap($templateName);
|
||||
|
||||
// 레이아웃 설명(`meta.description`)은 그 레이아웃을 소유한 템플릿의 사전 키를 쓴다.
|
||||
// 코드 편집 화면은 관리자 템플릿 사전으로 렌더하므로 유저 템플릿 키를 알지 못해,
|
||||
// 해석하지 않고 내보내면 설명 칸에 `$t:user.…` 가 원문으로 노출된다.
|
||||
$translations = $this->resolveTemplateTranslations($templateName);
|
||||
|
||||
$collection = LayoutListResource::collection($layouts);
|
||||
$collection->collection->transform(
|
||||
fn (LayoutListResource $resource) => $resource->withRoutePathMap($routePathMap)
|
||||
fn (LayoutListResource $resource) => $resource
|
||||
->withRoutePathMap($routePathMap)
|
||||
->withTranslations($translations)
|
||||
);
|
||||
|
||||
return $this->success('common.success', $collection);
|
||||
@@ -80,7 +87,8 @@ class LayoutController extends AdminBaseController
|
||||
|
||||
return $this->success(
|
||||
'common.success',
|
||||
new LayoutResource($layout)
|
||||
(new LayoutResource($layout))
|
||||
->withTranslations($this->resolveTemplateTranslations($templateName))
|
||||
);
|
||||
}
|
||||
|
||||
@@ -109,7 +117,8 @@ class LayoutController extends AdminBaseController
|
||||
|
||||
return $this->success(
|
||||
'common.success',
|
||||
new LayoutResource($layout)
|
||||
(new LayoutResource($layout))
|
||||
->withTranslations($this->resolveTemplateTranslations($templateName))
|
||||
);
|
||||
} catch (ConcurrentModificationException $e) {
|
||||
DB::rollBack();
|
||||
@@ -264,4 +273,25 @@ class LayoutController extends AdminBaseController
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 목록 설명 해석에 쓸 소유 템플릿 사전을 로드합니다.
|
||||
*
|
||||
* 활성 로케일 기준이며, 로드에 실패하면 빈 배열을 돌려준다 — 그 경우
|
||||
* {@see LayoutListResource} 가 레이아웃 이름으로 폴백하므로 목록은 계속 그려진다.
|
||||
*
|
||||
* @param string $templateName 템플릿 식별자
|
||||
* @return array<string, mixed> 템플릿 프론트엔드 다국어 데이터
|
||||
*/
|
||||
private function resolveTemplateTranslations(string $templateName): array
|
||||
{
|
||||
$result = $this->templateService->getLanguageDataWithModules(
|
||||
$templateName,
|
||||
app()->getLocale()
|
||||
);
|
||||
|
||||
return ($result['success'] ?? false) && is_array($result['data'] ?? null)
|
||||
? $result['data']
|
||||
: [];
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user