argument('mode'); if ($requested === null) { $this->showStatus($current); return Command::SUCCESS; } if (! in_array($requested, [AssetUrl::MODE_EXTENSION, AssetUrl::MODE_EXTENSIONLESS], true)) { $this->error(__('asset_url_mode.invalid', ['mode' => $requested])); return Command::FAILURE; } if ($requested === $current) { $this->info(__('asset_url_mode.already', ['mode' => $current])); return Command::SUCCESS; } $saved = $settingsService->saveSettings([ '_tab' => 'general', 'general' => ['asset_url_mode' => $requested], ]); if (! $saved) { $this->error(__('asset_url_mode.save_failed')); return Command::FAILURE; } // SEO 프리렌더 캐시에는 생성 시점의 자산 URL 이 그대로 구워져 있다. // 모드를 바꾸면 그 URL 들이 전부 어긋나므로 함께 비운다 (계획서 §알려진 한계). $seoCacheManager->clearAll(); $this->info(__('asset_url_mode.switched', ['from' => $current, 'to' => $requested])); $this->line(__('asset_url_mode.seo_cache_cleared')); return Command::SUCCESS; } /** * 현재 모드와 진단 안내를 출력합니다. * * @param string $current 현재 모드 */ private function showStatus(string $current): void { $this->line(''); $this->line(' '.__('asset_url_mode.current', ['mode' => $current])); $this->line(''); // audit:allow asset-url-builder-required reason: 두 모드의 URL 형태를 나란히 // 보여주는 대조표라 빌더로 생성할 수 없다 (빌더는 현재 모드 하나만 만든다). $rows = $current === AssetUrl::MODE_EXTENSION ? [ ['/api/templates/{id}/routes.json', '/api/templates/{id}/routes'], ['/api/modules/bundle.js', '/api/modules/bundle/js'], ['/api/templates/assets/{id}/js/a.js', '/api/templates/assets/{id}?file=js/a.js'], ] : [ ['/api/templates/{id}/routes', '/api/templates/{id}/routes.json'], ['/api/modules/bundle/js', '/api/modules/bundle.js'], ['/api/templates/assets/{id}?file=js/a.js', '/api/templates/assets/{id}/js/a.js'], ]; $this->table( [__('asset_url_mode.table.in_use'), __('asset_url_mode.table.alternative')], $rows, ); $this->line(' '.__('asset_url_mode.diagnose_title')); $this->line(' curl -i '.rtrim(config('app.url'), '/').'/api/system/asset-probe.js'); $this->line(' curl -i '.rtrim(config('app.url'), '/').'/api/system/asset-probe'); $this->line(''); $this->line(' '.__('asset_url_mode.diagnose_hint')); $this->line(''); $this->line(' '.__('asset_url_mode.switch_hint')); $this->line(''); } }