Files
Gnuboard7/app/Http/Controllers/Concerns/InjectsExtensionLanguagePacks.php
2026-05-11 11:29:41 +09:00

46 lines
1.5 KiB
PHP

<?php
namespace App\Http\Controllers\Concerns;
use App\Enums\LanguagePackScope;
use App\Http\Resources\LanguagePackResource;
use App\Services\LanguagePackService;
use Illuminate\Http\Request;
/**
* 확장(모듈/플러그인/템플릿) detail 응답에 `language_packs` 필드를 주입하는 trait.
*
* 컨트롤러에서 `LanguagePackService::getPacksForExtension()` 을 1회 호출하고
* `LanguagePackResource` 로 직렬화하여 detail 배열에 병합합니다 — N+1 회피 + 단일
* 책임 유지.
*/
trait InjectsExtensionLanguagePacks
{
/**
* 확장 detail 배열에 `language_packs` 필드를 추가합니다.
*
* @param array<string, mixed> $detail Resource toDetailArray 결과
* @param LanguagePackScope $scope 대상 스코프
* @param string|null $targetIdentifier 대상 식별자 (코어는 null)
* @param Request $request HTTP 요청
* @return array<string, mixed> language_packs 가 추가된 detail 배열
*/
protected function attachLanguagePacks(
array $detail,
LanguagePackScope $scope,
?string $targetIdentifier,
Request $request,
): array {
/** @var LanguagePackService $service */
$service = app(LanguagePackService::class);
$packs = $service->getPacksForExtension($scope, $targetIdentifier);
$detail['language_packs'] = $packs
->map(fn ($pack) => (new LanguagePackResource($pack))->toArray($request))
->all();
return $detail;
}
}