설치 단계와 코어 부팅의 정책이 엇갈려 있었다. 인스톨러는 root 를 자유롭게 허용하면서, 설치 후 부팅은 같은 값을 보고 확장 로딩 전체를 조용히 스킵했다. 설치는 성공하지만 이후 깨진 화면만 뜨고 원인은 로그 한 줄에만 남았다. 판정을 프레임워크 의존성 0 인 공용 SSoT 로 모아 인스톨러와 코어가 같은 답을 내게 하고, 설치 단계에서 서버 2경로로 차단하며, 설치 후 변경은 전용 에러 페이지로 드러낸다. 가드를 boot 가 아닌 미들웨어에 두어 artisan 이 죽지 않게 해 복구 수단을 남겼다. admin 은 일반 권한 운영 계정 오차단을 막기 위해 차단 목록에서 제외했다. OPcache 는 상태 조회 경로 자체가 없어 성능 저하를 인지할 방법이 없었다. 설치 단계 경고(비차단)와 관리자 정보 탭 표시를 같은 판정 SSoT 로 추가했다. 확장 로드 여부만으로는 부족해 opcache.enable 지시자까지 확인하며, ini_get 이 차단된 환경은 "확인 불가"로 폴백해 경고도 차단도 하지 않는다.
43 lines
1.4 KiB
PHP
43 lines
1.4 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Middleware\Concerns;
|
|
|
|
use Illuminate\Http\Request;
|
|
|
|
/**
|
|
* SetLocale 미들웨어보다 앞서 실행되는 미들웨어를 위한 로케일 자체 감지.
|
|
*
|
|
* 메인터넌스 페이지·DB 자격증명 가드처럼 인증·세션·확장 로딩 이전에 응답을
|
|
* 만들어야 하는 미들웨어는 SetLocale 이 아직 실행되지 않은 상태에서 동작한다.
|
|
* 이 트레이트가 SetLocale 의 판정 로직을 준용해 Accept-Language 를 해석한다.
|
|
*/
|
|
trait DetectsRequestLocale
|
|
{
|
|
/**
|
|
* 요청 헤더에서 로케일을 감지합니다.
|
|
*
|
|
* @param Request $request HTTP 요청
|
|
* @return string 감지된 로케일 (지원 목록에 없으면 앱 기본 로케일)
|
|
*/
|
|
protected function detectLocale(Request $request): string
|
|
{
|
|
$supportedLocales = config('app.supported_locales', ['ko', 'en']);
|
|
|
|
$acceptLanguage = $request->header('Accept-Language');
|
|
if ($acceptLanguage) {
|
|
$languages = explode(',', $acceptLanguage);
|
|
foreach ($languages as $language) {
|
|
$lang = trim(explode(';', $language)[0]);
|
|
if (strpos($lang, '-') !== false) {
|
|
$lang = explode('-', $lang)[0];
|
|
}
|
|
if (in_array($lang, $supportedLocales)) {
|
|
return $lang;
|
|
}
|
|
}
|
|
}
|
|
|
|
return config('app.locale', 'ko');
|
|
}
|
|
}
|