최소 패키지
modules/hello/
extension.json
bootstrap.php
templates/hello.php{
"id": "hello", "type": "module", "name": "인사",
"description": "공개 인사 화면", "version": "1.0.0",
"api": 1, "route_prefix": "/hello", "aliases": false,
"entry_path": "/", "public_path": "/",
"requires": [], "optional": []
}ID와 폴더명을 맞춥니다. 영문 소문자로 시작하는 소문자·숫자·_·- 이름을 사용합니다. 확장은 최초 비활성입니다. 공개 모듈도 관리자가 켜기 전에는 실행되지 않습니다.
bootstrap과 라우트
<?php
use GnuCms\Extension\Context;
use GnuCms\View\View;
return static function (Context $context): void {
$context->route('GET', '/', static function ($request, $response) {
return View::forExtension($request, 'hello', __DIR__ . '/templates')
->render($response, 'hello', ['message' => '안녕하세요']);
});
};Context는 고정 경로의 GET·POST를 등록합니다. 동적 라우트 패턴을 넘기지 않습니다. POST는 CSRF, admin:true는 전역 관리자 검사를 적용합니다. 공개 라우트의 로그인·데이터 소유권은 해당 패키지가 검사합니다.
서비스와 의존성
필수 확장은 requires, 선택 확장은 optional의 전체 키로 선언합니다. 제공 서비스는 context->provide(), 사용 서비스는 context->service(패키지키, 서비스명)로 연결합니다. 다른 패키지 PHP 파일을 직접 require해 내부 구현에 의존하지 않습니다.
route_prefix는 짧은 공개 기본 경로, admin_route_prefix는 관리자 기본 경로입니다. 충돌 경로는 실행을 막습니다. aliases:false는 새 패키지의 기존 확장 별칭을 만들지 않습니다. public_path는 등록된 공개 GET 진입점을 메뉴로 연결합니다.
뷰와 배포
View::forExtension의 탐색 순서는 선택 테마 extensions/이름, 패키지 템플릿, 사이트 공통, 코어 확장 조각입니다. 관리자 화면은 admin/extension과 extension_body 블록을 사용합니다. 공개 화면은 사이트 layout을 사용합니다.
bootstrap은 등록만 수행하고 등록 단계에서 업무 데이터·외부 발송을 바꾸지 않습니다. 필요한 의존성·자산은 개발 환경에서 준비한 완성본으로 배포합니다.
문서 파일 갱신 26-10-07 08:34:40