Phase 6 zamknięta po 2 planach. Pełny fundament dla Phase 7-13 (migracja 17 admin controllers do Admin\ namespace). 06-01 (Forms infrastructure): - Admin\ViewModels\Forms\* — 5 ViewModeli (687 L) - Admin\Validation\FormValidator (196 L) - composer.json: php >=7.4, PSR-4 paths cross-platform safe (Admin\ → autoload/admin/, Frontend\ → autoload/front/) 06-02 (Support layer): - Admin\Support\TableListRequestFactory (99 L) — parser list z $_GET - Admin\Support\Forms\FormRequestHandler (159 L) — POST + CSRF + walidacja + persist - Admin\Support\Forms\FormFieldRenderer (494 L) — renderer HTML pól Decyzje: - Brak BaseController — Phase 7+ kontrolery jako POJOs z DI (jak shopPRO) - PSR-4 filename fix: TableListRequestFactory.php (bez shopPRO 'class.' prefix) - PascalCase namespace (Admin\Support) na lowercase folder admin/ ze względu na Windows fs case-insensitivity vs legacy admin/controls/ Pliki: 8 nowych klas, 1635 L kodu PHP 7.4-kompatybilnego, zero regresji. Smoke test: walidacja e-maila zwraca PL komunikat, factory parsuje ?page=&per_page=&sort=&filter=, Domain/Shared nadal ładują się. PHPUnit: 37/37 OK. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5.2 KiB
phase, plan, status, completed
| phase | plan | status | completed |
|---|---|---|---|
| 06-admin-base | 01 | complete | 2026-04-30 |
SUMMARY: Plan 06-01 — Forms infrastructure
Co zrobiono
Przeniesiono z shopPRO do cmsPRO warstwę Form Edit System pod nowy namespace Admin\ (PascalCase). Wszystkie pliki ładują się przez Composer PSR-4, smoke test runtime potwierdza poprawne działanie walidacji.
Pliki utworzone (6)
| Plik | Linii | Namespace |
|---|---|---|
autoload/admin/ViewModels/Forms/FormEditViewModel.php |
178 | Admin\ViewModels\Forms |
autoload/admin/ViewModels/Forms/FormField.php |
364 | Admin\ViewModels\Forms |
autoload/admin/ViewModels/Forms/FormFieldType.php |
25 | Admin\ViewModels\Forms |
autoload/admin/ViewModels/Forms/FormTab.php |
31 | Admin\ViewModels\Forms |
autoload/admin/ViewModels/Forms/FormAction.php |
89 | Admin\ViewModels\Forms |
autoload/admin/Validation/FormValidator.php |
196 | Admin\Validation |
Total: 883 linii kodu PHP 7.4-kompatybilnego.
Pliki zmodyfikowane (2)
composer.json— dodano"require": { "php": ">=7.4" }, mapowanie PSR-4 dlaAdmin\ustawione na realny case na diskuvendor/composer/autoload_*— regenerowane przezcomposer dump-autoload
Smoke test (literalny output)
Admin\ViewModels\Forms\FormEditViewModel: OK
Admin\ViewModels\Forms\FormField: OK
Admin\ViewModels\Forms\FormFieldType: OK
Admin\ViewModels\Forms\FormTab: OK
Admin\ViewModels\Forms\FormAction: OK
Admin\Validation\FormValidator: OK
SMOKE: OK: Pole "E-mail" musi być poprawnym adresem e-mail.
PHP_REQ: >=7.4
php -l na wszystkich 6 plikach: 6× "No syntax errors detected".
Zero regresji — Domain\Articles\ArticlesRepository i Shared\Helpers\Helpers ładują się dalej.
Acceptance Criteria — status
- AC-1: Form ViewModels load via PSR-4 — wszystkie 5 klas + FormValidator
- AC-2: FormValidator namespace + dependency —
use Admin\ViewModels\Forms\...działa - AC-3: Smoke test walidacji e-maila — zwraca PL komunikat błędu
- AC-4: PHP
>=7.4w composer.json + PascalCase namespace na wszystkich nowych plikach - AC-5: Zero regresji — istniejące Domain/Shared repos działają
Deviation: PSR-4 path mapping w composer.json
Plan zakładał: "Admin\\": "autoload/Admin/" (PascalCase folder)
Zmienione na: "Admin\\": "autoload/admin/" (lowercase folder)
Powód: Windows file system jest case-insensitive — folder autoload/admin/ (legacy) i autoload/Admin/ (planowany) to ten sam katalog na dysku. Git tracked path = admin/ (lowercase, ustanowione przez wcześniejsze fazy z legacy controls/, factory/, view/). Na produkcyjnym Linux (case-sensitive) PSR-4 z mapowaniem "Admin\\": "autoload/Admin/" nie znalazłby plików, bo realny katalog na disku to admin/.
Konsekwencje:
- Klasa
Admin\ViewModels\Forms\FormFieldładuje się zautoload/admin/ViewModels/Forms/FormField.php✓ - Legacy
admin\controls\Articles(lowercase namespace) NIE matches PSR-4 prefixAdmin\(case-sensitive) — ładuje się przez legacy autoloader (autoload/autoloader.php) ✓ - Cross-platform safe: działa identycznie na Windows i Linux
Bonus zmiana (preventive): "Frontend\\": "autoload/Frontend/" → "Frontend\\": "autoload/front/" z tego samego powodu — żeby Phase 14+ nie powtórzyła problemu.
Boundaries — przestrzegane
- ✓ Brak zmian w
autoload/admin/controls/,factory/,view/(50+ plików legacy nietknięte) - ✓ Brak zmian w
autoload/Domain/,autoload/Shared/ - ✓ Brak zmian w
autoload/autoloader.php - ✓
composer.locknieruszony (composer updatenie uruchamiany) - ✓ Tylko zmodyfikowano composer.json + vendor/composer/autoload_* (regen)
Deferred issues / observations
-
FormValidator constants nie ma — komunikaty błędów to literały string. Mogłyby być stałe klasy (np.
MSG_REQUIRED,MSG_INVALID_EMAIL) dla i18n w przyszłości. Przeniesienie 1:1 z shopPRO (zachowanie kompatybilności). -
FormField fluent setters mile by były — obecnie 17-argumentowy konstruktor + 14 factory methods. Dla Phase 7+ kontrolerów to OK, ale builder pattern (
FormField::text('name')->label('X')->required()->placeholder('Y')) byłby czystszy. Deferred. -
switchjako nazwa metody (FormField::switch()) — w PHP < 8.0 to słowo kluczowe i nie może być statycznym nazwiskiem metody w niektórych kontekstach. PHP 7.4 dopuszcza je jako nazwę metody (działa), ale uwaga przy edycji w niektórych edytorach. Zachowane bo shopPRO też tak ma. -
FormTab/FormAction bez factory methods — tylko konstruktor. To jest design choice z shopPRO; nie zmieniam.
Setup dla Plan 06-02
Po 06-01 założenia stabilne dla Plan 06-02 (Controller infrastructure):
Admin\namespace działa via PSR-4 → mapowanie doautoload/admin/- composer.json deklaruje
php: >=7.4 - Form VMs dostępne —
BaseControllermoże budować/zwracaćFormEditViewModel - Konwencja PascalCase utrwalona —
Admin\Base\BaseController,Admin\Support\TableListRequestFactory
Plan 06-02 doda:
autoload/admin/Support/TableListRequestFactory.php(Admin\Support\TableListRequestFactory)autoload/admin/Base/BaseController.php(Admin\Base\BaseController)