92 lines
3.2 KiB
Markdown
92 lines
3.2 KiB
Markdown
# 플러그인 스캐폴딩 (create-plugin)
|
|
|
|
새로운 플러그인의 기본 구조를 생성합니다.
|
|
|
|
## TL;DR (5초 요약)
|
|
|
|
```text
|
|
1. 명령: /create-plugin vendor-plugin
|
|
2. 위치: plugins/_bundled/vendor-plugin/
|
|
3. 참조 샘플: plugins/_bundled/gnuboard7-hello_plugin/ (학습용 최소 플러그인, Action+Filter 훅)
|
|
4. hidden 플래그: manifest.hidden=true 시 관리자 UI 제외 (CLI 정상)
|
|
5. 생성 후: extension:update-autoload → plugin:install → plugin:activate
|
|
```
|
|
|
|
## 사용법
|
|
|
|
```text
|
|
/create-plugin vendor-plugin
|
|
```
|
|
|
|
**예시**: `/create-plugin sirsoft-payment`
|
|
|
|
## 입력 형식
|
|
|
|
- `vendor-plugin` — 벤더명과 플러그인명을 하이픈(-)으로 연결
|
|
- 네임스페이스 자동 변환: `sirsoft-payment` → `Plugins\Sirsoft\Payment\`
|
|
- 언더스코어(_) → PascalCase: `sirsoft-daum_postcode` → `Plugins\Sirsoft\DaumPostcode\`
|
|
|
|
## 생성 위치
|
|
|
|
`plugins/_bundled/vendor-plugin/`
|
|
|
|
## 생성되는 파일
|
|
|
|
| 파일 | 설명 |
|
|
| ---- | ---- |
|
|
| `plugin.json` | 메타데이터 SSoT (identifier, version, assets, loading 등) |
|
|
| `plugin.php` | AbstractPlugin 상속 엔트리 클래스 (루트 위치!) |
|
|
| `composer.json` | PSR-4 오토로딩 (src/ + ./ 매핑) |
|
|
| `CHANGELOG.md` | Keep a Changelog 형식 |
|
|
| `LICENSE` | MIT 라이선스 |
|
|
| `config/settings/defaults.json` | 설정 기본값 (_meta, defaults, frontend_schema) |
|
|
| `resources/lang/{ko,en}.json` | 프론트엔드 다국어 (백엔드 PHP 다국어 없음) |
|
|
| `src/routes/web.php` | 웹 라우트 (선택) |
|
|
| `tests/PluginTestCase.php` | 테스트 기반 클래스 |
|
|
|
|
## 생성되는 디렉토리
|
|
|
|
- `src/Listeners/` — 훅 리스너
|
|
- `src/Services/` — 서비스 클래스
|
|
- `resources/extensions/` — layout_extensions JSON
|
|
- `resources/layouts/admin/` — 설정 UI 레이아웃
|
|
- `tests/Feature/`, `tests/Unit/` — 테스트
|
|
|
|
## plugin.php 구현 메서드
|
|
|
|
| 메서드 | 설명 |
|
|
| ------ | ---- |
|
|
| `getMetadata()` | 메타데이터 (author, license, homepage, keywords) |
|
|
| `getDependencies()` | 의존성 (모듈만 가능, 플러그인 간 의존 금지) |
|
|
| `getSettingsSchema()` | 설정 스키마 (type, default, label, hint) |
|
|
| `getConfigValues()` | 설정 기본값 |
|
|
| `getHookListeners()` | 훅 리스너 클래스 목록 |
|
|
| `getHooks()` | 제공하는 훅 정의 (name, type, description, parameters) |
|
|
|
|
## 모듈과의 주요 차이
|
|
|
|
| 항목 | 모듈 | 플러그인 |
|
|
| ---- | ---- | -------- |
|
|
| 엔트리 위치 | module.php (src root) | plugin.php (프로젝트 루트!) |
|
|
| 베이스 클래스 | AbstractModule | AbstractPlugin |
|
|
| 권한/역할/메뉴 | 있음 | 없음 |
|
|
| DB 모델 | 있음 | 선택적 |
|
|
| 백엔드 다국어 | PHP 파일 | 없음 |
|
|
| 레이아웃 | 완전한 페이지 | settings.json만 (나머지 layout_extensions) |
|
|
| 의존성 | 모듈+플러그인 | 모듈만 |
|
|
|
|
## 생성 후 다음 단계
|
|
|
|
```bash
|
|
php artisan extension:update-autoload
|
|
php artisan plugin:install vendor-plugin
|
|
php artisan plugin:activate vendor-plugin
|
|
```
|
|
|
|
## 참조 문서
|
|
|
|
- [플러그인 개발 가이드](../../extension/plugin-development.md)
|
|
- [훅 시스템](../../extension/hooks.md)
|
|
- [모듈 환경설정 시스템](../../extension/module-settings.md)
|
|
- [Changelog 규칙](../../extension/changelog-rules.md)
|