- Move 12 markdown files from root to docs/ subdirectories - Organize documentation by category: • docs/troubleshooting/ (1 file) - Technical troubleshooting guides • docs/deployment/ (4 files) - Deployment and security documentation • docs/guides/ (3 files) - Feature-specific guides • docs/planning/ (4 files) - Planning and improvement proposals Root directory cleanup: - Reduced from 16 to 4 markdown files in root - Only essential project files remain: • CLAUDE.md (AI instructions) • README.md (Main project readme) • CLEANUP_PLAN.md (Current cleanup plan) • SRC_STRUCTURE_IMPROVEMENTS.md (Structure improvements) This improves: ✅ Documentation discoverability ✅ Logical organization by purpose ✅ Clean root directory ✅ Better maintainability
10 KiB
Template System - Analyse & Verbesserungsvorschläge
Status Quo - Aktuelle Architektur
Core Components
1. Template Engine (Engine.php)
- Hauptverantwortlich für Template-Rendering
- Verwendet
TemplateLoaderzum Laden - Verwendet
TemplateProcessorzur Verarbeitung - Smart Caching System (derzeit deaktiviert wegen ForProcessor Issue)
- Performance-Tracking integriert
2. Template Loader System
- Multiple Resolver Strategies:
DiscoveryResolver- Automatische Template-ErkennungTemplateMapResolver- Mapping-basierte AuflösungDefaultPathResolver- Standard-Pfad-LogikComponentResolver- Component-TemplatesControllerResolver- Controller-spezifische TemplatesLayoutResolver- Layout-Templates
3. Template Processing Pipeline
TemplateProcessor- HauptverarbeitungEnhancedTemplateProcessor- Erweiterte FeaturesDomComponentService- DOM-basierte Component-Verarbeitung- Viele Prozessoren:
- CsrfReplaceProcessor
- PhpVariableProcessor
- CommentStripProcessor
- SwitchCaseProcessor
- EscapeProcessor
- DateFormatProcessor
- SlotProcessor
- IncludeProcessor
- RemoveEmptyLinesProcessor
- usw.
4. Component System
ComponentRenderer- Component-RenderingDomComponentService- DOM-basierte ComponentsComponentCache- Component-Caching
5. Caching System
- Multi-Level Caching:
CacheManager- Zentrale Cache-VerwaltungSmartTemplateAnalyzer- Intelligente Cache-Strategie-AuswahlFragmentCache- Fragment-basiertes CachingTaggedFragmentCache- Tag-basiertes Cache-Invalidierung
- Cache Strategies:
FullPageCacheStrategyFragmentCacheStrategyComponentCacheStrategyNoCacheStrategy
6. Table System
- Dedicated Table-Rendering System
TableBuilder,TableProcessor- Multiple Formatters (Boolean, Currency, Date, Number, Status, Masked)
- Generators für verschiedene Datentypen
7. Template Functions
UrlFunction- URL-GenerierungImageSlotFunction- Image-Slot-Management
Aktuelle Template-Syntax
Platzhalter
{{ variable }}
{{ object.property }}
Kontrollstrukturen
<if condition="{{ variable }}">
<p>Content when true</p>
</if>
<for items="{{ items }}" as="item">
<p>{{ item.name }}</p>
</for>
<switch value="{{ status }}">
<case value="active">Active</case>
<case value="inactive">Inactive</case>
<default>Unknown</default>
</switch>
Layouts & Slots
<layout name="layouts/main" />
<slot name="header">
<h1>Custom Header</h1>
</slot>
Components
<include component="button" props="{{ buttonProps }}" />
Stärken des aktuellen Systems
✅ Sehr flexibel
- Multiple Resolver-Strategien
- Umfangreiches Processing-Pipeline
- Component-basierte Architektur
✅ Performance-optimiert
- Smart Caching mit verschiedenen Strategien
- Fragment-Caching
- Intelligent Analysis für beste Cache-Strategy
✅ Feature-reich
- Table-Rendering System
- Form-Processing
- CSRF-Protection integriert
- Meta-Tag-Management
✅ Framework-konform
- Readonly Classes
- Value Objects
- Dependency Injection
- Attribute-basierte Discovery
Schwächen & Verbesserungspotential
1. ❌ Komplexität
Problem: Das System ist sehr komplex mit vielen Abstraktionsebenen
- Zu viele Resolver-Strategien
- Zu viele Prozessoren
- Schwer zu verstehen für neue Entwickler
Lösung:
- Dokumentation der wichtigsten Flows
- Vereinfachung der Resolver-Chain
- Klare Naming Conventions
2. ❌ Caching ist deaktiviert
Problem: Smart Caching wegen ForProcessor-Issue deaktiviert
// FORCE DIRECT RENDERING - Bypass all caching to fix ForProcessor issue
return $this->renderDirect($context);
Lösung:
- ForProcessor Issue identifizieren und fixen
- Smart Caching wieder aktivieren
- Performance-Gewinn durch Caching nutzen
3. ❌ Template-Ordnerstruktur unklar
Problem: Templates liegen an verschiedenen Stellen
src/Framework/View/templates/- Framework-Templatessrc/Application/Admin/templates/- Admin-Templatessrc/Application/Website/templates/- Website-Templates (sollte existieren)
Lösung:
- Klare Konvention definieren
- Template-Discovery verbessern
- Bessere Namespace-Organisation
4. ❌ Fehlende Admin-Form-Patterns
Problem: Kein standardisiertes Pattern für CRUD-Forms
- Jeder Controller baut Forms manuell
- Keine Wiederverwendung
- Inkonsistente UX
Lösung:
- Admin-Form-Builder erstellen
- CRUD-Template-Pattern definieren
- Form-Validation integrieren
5. ❌ Component System unternutzt
Problem: Component-System existiert, wird aber wenig genutzt
- Viel Duplicate Code in Templates
- Keine UI-Component-Library
Lösung:
- Wiederverwendbare UI-Components erstellen
- Component-Library aufbauen
- Storybook-ähnliche Übersicht
6. ❌ Template-Syntax inkonsistent
Problem: Mix aus verschiedenen Syntaxen
- Manchmal
{{ }}Platzhalter - Manchmal DOM-Tags
<if>,<for> - Verwirrend für Entwickler
Lösung:
- Einheitliche Syntax definieren
- Migration-Guide erstellen
- Linting-Rules für Templates
Verbesserungsvorschläge - Priorisiert
🎯 Phase 1: Grundlagen stabilisieren (Jetzt)
1. ForProcessor Issue fixen
- Debug-Logs analysieren
- Issue identifizieren und beheben
- Smart Caching wieder aktivieren
2. Template-Konventionen dokumentieren
- Template-Ordnerstruktur definieren
- Naming Conventions festlegen
- Resolver-Priority-Chain dokumentieren
3. Admin-Template-Patterns
- Generic CRUD-Templates erstellen
- Form-Builder-Pattern implementieren
- Index/Create/Edit/Show-Templates
🚀 Phase 2: Admin-System modernisieren
1. Admin-Form-Builder
final readonly class AdminFormBuilder
{
public function buildForm(string $entity, array $fields, ?object $data = null): array
{
return [
'fields' => $this->buildFields($fields, $data),
'actions' => $this->buildActions($entity),
'validation' => $this->buildValidation($fields),
'csrf_token' => $this->generateCsrfToken()
];
}
}
2. CRUD-Templates
templates/admin/crud/
├── index.view.php # List view with table
├── create.view.php # Create form
├── edit.view.php # Edit form
├── show.view.php # Detail view
└── components/
├── form-field.view.php
├── table-row.view.php
└── action-buttons.view.php
3. Table-Builder Integration
- Bestehenden TableBuilder nutzen
- Admin-spezifische Table-Formatters
- Pagination & Sorting
🎨 Phase 3: Component Library
1. UI-Components erstellen
components/
├── buttons/
│ ├── primary-button.view.php
│ ├── secondary-button.view.php
│ └── danger-button.view.php
├── forms/
│ ├── text-input.view.php
│ ├── select-input.view.php
│ └── checkbox-input.view.php
├── cards/
│ ├── card.view.php
│ ├── card-header.view.php
│ └── card-body.view.php
└── alerts/
├── success-alert.view.php
├── error-alert.view.php
└── warning-alert.view.php
2. Component-Usage-Pattern
<component name="button" type="primary" size="large">
Save Campaign
</component>
<component name="form/text-input"
name="title"
label="Campaign Title"
value="{{ campaign.title }}"
required="true" />
⚡ Phase 4: Performance & DX
1. Template-Caching optimieren
- Smart Cache wieder aktivieren
- Cache-Warmup-Strategy
- Development-Mode ohne Cache
2. Developer Experience
- Template-Syntax-Highlighting
- VS Code Extension für Templates
- Template-Linting
- Hot-Reload für Template-Änderungen
3. Testing
- Template-Unit-Tests
- Component-Tests
- Visual Regression Tests
Konkrete Nächste Schritte
Sofort (Diese Session):
-
ForProcessor Issue analysieren
tail -f /tmp/debug.log # Logs während Template-Rendering beobachten -
Admin-Form-Builder Prototype
- PreSave Campaign Forms als Beispiel
- Generic Form-Builder-Klasse
- Admin-CRUD-Templates
-
Template-Konventionen dokumentieren
- Wo welche Templates liegen
- Naming Conventions
- Best Practices
Nächste Session:
-
Component Library starten
- Basic UI Components
- Wiederverwendbare Form-Fields
- Alert/Message Components
-
Caching-System reparieren
- ForProcessor debuggen
- Smart Cache aktivieren
- Performance-Tests
Langfristig:
- Template-Syntax vereinheitlichen
- Developer Tools
- Visual Regression Testing
Empfehlung für Pre-Save System
Sofort umsetzbar:
- Generic Admin-CRUD-Templates erstellen
- Diese für Pre-Save Campaign Admin nutzen
- Public Template für Landing Page mit Component-Pattern
Code-Beispiel - Admin-Form-Builder Integration:
// In PreSaveCampaignAdminController
public function create(): ViewResult
{
$formBuilder = new AdminFormBuilder();
$form = $formBuilder->buildForm('presave-campaign', [
['name' => 'title', 'type' => 'text', 'required' => true],
['name' => 'artist_name', 'type' => 'text', 'required' => true],
['name' => 'cover_image_url', 'type' => 'url', 'required' => true],
['name' => 'description', 'type' => 'textarea'],
['name' => 'release_date', 'type' => 'date', 'required' => true],
['name' => 'track_urls', 'type' => 'repeatable', 'fields' => [
['name' => 'platform', 'type' => 'select', 'options' => ['spotify', 'apple_music']],
['name' => 'url', 'type' => 'text']
]]
]);
return new ViewResult('admin/crud/create', [
'title' => 'Create Pre-Save Campaign',
'form' => $form,
'resource' => 'presave-campaigns'
]);
}
Fazit
Das Template-System ist sehr mächtig, aber:
- ❌ Zu komplex für einfache Use-Cases
- ❌ Caching deaktiviert (Performance-Loss)
- ❌ Fehlende Standards für Admin-Forms
- ✅ Gute Basis für Verbesserungen
Next Action: Admin-Form-Builder + CRUD-Templates implementieren, dann Pre-Save System darauf aufbauen.