feat(core,admin_basic): .env 키 단위 우선 모드 추가
관리자 환경설정 저장값이 config 를 덮는 기존 설계는 공유호스팅을 1차 대상으로 삼은 결과다. .env 를 배포 기준값으로 관리하는 설치에서는 그 설계가 반대로 작동해, 설치기가 defaults 를 시드하는 순간부터 .env 의 28개 항목이 오류도 로그도 없이 사문화된다. G7_ENV_PRIORITY 옵트인으로 그 소유권을 키 단위로 되돌린다. 스위치를 켜지 않은 설치는 전 경로가 조기 return 이라 동작이 100% 동일하다. 명시 여부는 config 빌드 시점에 캡처한다 — 런타임 env 는 config:cache 환경에서 null 로 고정되어 판정이 영구 미발동한다(attachment.disk_explicit 와 같은 함정). 판정은 strict 라 APP_DEBUG=false·REDIS_DB=0 같은 falsy 명시도 명시로 본다. 잠금은 그 키의 주입만 건너뛰는 것이지만, 제거된 키의 부재를 값으로 읽는 자리가 있으면 형제 설정까지 무너진다. 게이트(웹소켓 토글·메일 드라이버·디버그 모드)와 기본값 주입(mailgun.endpoint·ses.region), 형제 폴백(reverb server endpoint), 파생 판정(storage_driver→attachment.disk)을 유효값으로 보정했다.
This commit is contained in:
1 parent
b97deee43a
commit
381fcc4e0b
37 files changed
+4026
-118
No files matched your search
@@ -15,6 +15,7 @@ use App\Services\DriverConnectionTester;
|
||||
use App\Services\DriverRegistryService;
|
||||
use App\Services\OutboundProxyTester;
|
||||
use App\Services\SettingsService;
|
||||
use App\Support\EnvPriority;
|
||||
use App\Support\TrustedProxyDiagnostic;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
@@ -36,6 +37,27 @@ class SettingsController extends AdminBaseController
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
/**
|
||||
* 설정 응답에 동봉할 `_meta` 를 만듭니다.
|
||||
*
|
||||
* 조회와 저장 두 응답이 같은 모양이어야 화면이 저장 직후에도 같은 판정을 이어갑니다 —
|
||||
* 한쪽만 필드가 늘면 저장 후 잠금 표시가 조용히 사라집니다.
|
||||
*
|
||||
* - `limits`: 입력 한계값 (core.settings_limits)
|
||||
* - `env_priority_enabled`: `.env` 우선 모드 활성 여부 (안내 배너 표시 판정)
|
||||
* - `env_locked`: `.env` 로 잠긴 필드 목록 (프론트엔드 키 기준)
|
||||
*
|
||||
* @return array<string, mixed> 응답 메타 배열
|
||||
*/
|
||||
private function buildSettingsMeta(): array
|
||||
{
|
||||
return [
|
||||
'limits' => config('core.settings_limits', []),
|
||||
'env_priority_enabled' => EnvPriority::enabled(),
|
||||
'env_locked' => $this->settingsService->envLockedMeta(),
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* 모든 시스템 설정을 조회합니다.
|
||||
*
|
||||
@@ -46,7 +68,7 @@ class SettingsController extends AdminBaseController
|
||||
try {
|
||||
$settings = $this->settingsService->getAllSettings();
|
||||
$settings['available_drivers'] = $this->driverRegistryService->getAllAvailableDrivers();
|
||||
$settings['_meta'] = ['limits' => config('core.settings_limits', [])];
|
||||
$settings['_meta'] = $this->buildSettingsMeta();
|
||||
|
||||
return $this->success('settings.fetch_success',
|
||||
(new SettingsResource($settings))->toArray(request())
|
||||
@@ -74,7 +96,7 @@ class SettingsController extends AdminBaseController
|
||||
// 저장 후 전체 설정 반환 (관리자 UI 상태 업데이트용)
|
||||
$allSettings = $this->settingsService->getAllSettings();
|
||||
$allSettings['available_drivers'] = $this->driverRegistryService->getAllAvailableDrivers();
|
||||
$allSettings['_meta'] = ['limits' => config('core.settings_limits', [])];
|
||||
$allSettings['_meta'] = $this->buildSettingsMeta();
|
||||
|
||||
return $this->success('settings.save_success', [
|
||||
'settings' => $allSettings,
|
||||
|
||||
Reference in new issue
Block a user