helpers = ['form', 'url']; // Caution: Do not edit this line. parent::initController($request, $response, $logger); // Preload any models, libraries, etc, here. // $this->session = service('session'); } /** * /admin/* 또는 /bag/* 업무 화면 공통: 요청이 bag 이면 메인 사이트 레이아웃, 아니면 관리자 레이아웃. * * @param array $contentData */ /** * 워크스페이스 탭(iframe) 안에서 열린 요청인지. ?embed=1 또는 Sec-Fetch-Dest=iframe. * iframe 내 링크 이동·폼 전송·리다이렉트까지 모두 임베드로 처리되도록 헤더로도 판정한다. */ protected function isEmbeddedRequest(): bool { if ($this->request->getGet('embed') !== null) { return true; } $dest = strtolower(trim((string) $this->request->getHeaderLine('Sec-Fetch-Dest'))); return $dest === 'iframe' || $dest === 'frame'; } protected function renderWorkPage(string $title, string $contentView, array $contentData = []): string { $content = view($contentView, $contentData); helper('admin'); $path = function_exists('current_nav_request_path') ? current_nav_request_path() : ''; if ($path === '') { $uri = service('request')->getUri(); $path = trim((string) $uri->getPath(), '/'); } while (str_starts_with($path, 'index.php/')) { $path = substr($path, strlen('index.php/')); } if ($path === 'bag' || str_starts_with($path, 'bag/')) { // /workspace 탭(iframe) 안에서는 임베드 레이아웃, 아니면 gov-portal 셸 return view($this->isEmbeddedRequest() ? 'bag/layout/embed' : 'bag/layout/portal', [ 'title' => $title, 'content' => $content, ]); } return view('admin/layout', [ 'title' => $title, 'content' => $content, ]); } }