This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Architektur & Überblick
Die vier Säulen
1️⃣ Autoloader (src/Autoloader.php)
Ein simpler PSR-4-Autoloader für das App\-Namespace. Er definiert drei globale Konstanten:
BASE_DIR // Basis-Verzeichnis des Projekts
CONFIG_DIR // Konfigurationsverzeichnis
CONFIG_FILE // Pfad zur config.php
Diese Konstanten werden von allen anderen Klassen benötigt. Alle Skripte müssen den Autoloader zuerst laden.
2️⃣ Datenbank (src/Database/DBManager.php)
Ein minimaler PDO-Wrapper mit sicheren Methoden für CRUD-Operationen:
| Methode | Zweck |
|---|---|
query() |
Prepared Statement ausführen |
fetch() |
Eine Zeile zurückgeben |
fetchAll() |
Alle Zeilen zurückgeben |
insert() |
Datensatz einfügen |
update() |
Datensatz aktualisieren |
delete() |
Datensatz löschen |
Wichtig: Alle WHERE-Klauseln müssen Platzhalter (:id) enthalten. Keine direkten Werte einbauen!
3️⃣ Logging (src/Log/LogManager.php)
Drei Ausgabeziele:
- Datenbank (
logs-Tabelle) - Datei (
logs/app.log,logs/error.log) - Konsole (STDOUT)
Jeder Logeintrag enthält:
- Fingerprint (eindeutige ID des Tasks)
- Job ID (falls zugeordnet)
- Phorge ID (z.B.
T123für ein Ticket) - Severity Level (debug, info, warning, error, critical)
4️⃣ Tasks (src/Tasks/AbstractTask.php + konkrete Implementierungen)
Die Kernlogik des Projekts. Jeder Task:
- Erbt von
AbstractTask - Überschreibt die Methode
run() - Nutzt fluent Setters für Parameter
- Wird via
execute()aufgerufen (nichtrun()direkt)
Beispiel:
$task = (new ManiphestCreateTask())
->setTitle('Foo')
->setDescription('Bar')
->setOwner('PHID-USER-xyz');
$result = $task->execute();
Datenfluss
┌─────────────────────────┐
│ CLI-Skript / Cron │
└────────────┬────────────┘
│
▼
┌─────────────────────────┐
│ Task instanziieren │
│ (new ManiphestTask()) │
└────────────┬────────────┘
│
▼
┌─────────────────────────┐
│ Autoloader + Config │
│ laden (AbstractTask) │
└────────────┬────────────┘
│
▼
┌─────────────────────────┐
│ Parameter setzen │
│ (Fluent API) │
└────────────┬────────────┘
│
▼
┌─────────────────────────┐
│ execute() aufrufen │
│ (start Logging) │
└────────────┬────────────┘
│
▼
┌─────────────────────────┐
│ run() ausführen │
│ (Task-Logik) │
└────────────┬────────────┘
│
▼
┌─────────────────────────┐
│ Phorge API Call │
│ (callPhorgeApi()) │
└────────────┬────────────┘
│
▼
┌─────────────────────────┐
│ Ergebnis verarbeiten │
│ & Logging │
└────────────┬────────────┘
│
▼
┌─────────────────────────┐
│ Rückgabe an Aufrufer │
└─────────────────────────┘
Tabellen-Schema
Siehe sql/create.sql für die Details:
jobs- Definiert wiederholbare Aufgabenjobs_runplan- Protokolliert, wann was ausgeführt wurdelogs- Zentrale Log-Tabelle mit Fingerprintssettings- Optional: globale Einstellungen
Navigation
Erste Schritte
- Home
- Projektziele - Vision & Feature-Übersicht
- Projektstruktur - Verzeichnisse & Komponenten
Technisch
- Überblick - Architektur & Datenfluss
- Datenbank - Schema & DBManager
- Logging - Log-System verstehen
- API-Integration - Phorge API-Calls
Für Entwickler
- Entwicklung - Tasks schreiben, Patterns
- Phorge-API - Kurzeinführung in Conduit
- Konventionen - Code-Style, Deutsch in Commits
- Dev-Guide - Lokal testen & debuggen
- Schema-Refresh - Schema-Generator für Custom-Felder
- Logging - Design und Anwendung des Loggers
Betrieb
- Deployment - Installation auf Wikonia-Server
- Cron-Jobs - Automatisierte Ausführung
- Sicherheit - Best Practices
Help
- Häufige Fehler - Troubleshooting
---
PhorgeRunner - Automatisierungs-Tool für Wikonia Phorge
Repository: Git phorgerunner | Phorge Instanz: phorge.wikonia.net