Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

LifeCycle Diagram erstellen #1500

Open
tbaddade opened this issue Apr 15, 2024 · 1 comment
Open

LifeCycle Diagram erstellen #1500

tbaddade opened this issue Apr 15, 2024 · 1 comment

Comments

@tbaddade
Copy link
Member

https://vuejs.org/guide/essentials/lifecycle#lifecycle-diagram

Das könnte ich mir auch gut für YForm vorstellen. Wann passiert was.

  • YForm initialisieren
  • Value build
  • Pre-, Post, Validierung
  • Action
  • Send
  • etc.
@skerbis
Copy link
Contributor

skerbis commented Jan 30, 2025

in etwa so?

YForm Lifecycle

Ablauf-Diagramm

stateDiagram-v2
    [*] --> Initialize: YForm Constructor
    Initialize --> PreBuildValuesAndActions: Load Input Values
    PreBuildValuesAndActions --> BuildValueObjects: Create Value Objects
    BuildValueObjects --> BuildValidateObjects: Create Validate Objects 
    BuildValidateObjects --> BuildActionObjects: Create Action Objects

    BuildActionObjects --> ValuePreValidation: Submit
    
    ValuePreValidation --> ValueInitAndEnter: No Validation Errors
    ValuePreValidation --> HasErrors: Validation Errors
    
    ValueInitAndEnter --> ValidateExecution: Execute Value Objects
    ValidateExecution --> ValuePostValidation: Run Validations
    
    ValuePostValidation --> ActionExecution: No Validation Errors
    ValuePostValidation --> HasErrors: Validation Errors
    
    ActionExecution --> PreAction: Pre Actions
    PreAction --> PostAction: Execute Actions
    PostAction --> ActionsDone: Post Actions
    
    ActionsDone --> [*]: Form Done

    HasErrors --> [*]: Show Form Again

    note right of Initialize
        Load parameters, form elements
        Initialize objparams 
    end note

    note right of PreBuildValuesAndActions
        Setup objparams, 
        session data,
        CSRFToken    
    end note

    note right of ValuePreValidation
        CSRF check
        Custom pre-validation
    end note

    note right of ValuePostValidation
        Validate rules execution
        Fill value pools
    end note

    note right of ActionExecution
        Email sending
        Database operations
        Custom actions
    end note
Loading

Detaillierter Lifecycle-Ablauf

1. Initialisierung

YForm Constructor

  • Der YForm Constructor wird aufgerufen
  • Die Basis-Parameter werden gesetzt
  • Ein einzigartiger Form-Name wird generiert falls nicht angegeben
  • Debug-Modus wird geprüft und ggf. aktiviert

Parameter-Initialisierung

  • objparams werden mit Standardwerten initialisiert
  • Formular-spezifische Parameter werden gesetzt
  • Template-Pfade werden definiert
  • Error- und Warning-Handler werden initialisiert

2. Build-Phase

Pre-Build

  • Request-Daten werden geladen
  • Session-Handling wird eingerichtet
  • CSRF-Token wird generiert oder validiert
  • Objekt-Parameter werden für den Build-Prozess vorbereitet

Value Objects erstellen

  • Value-Definitionen werden durchlaufen
  • Für jeden Value-Type wird ein entsprechendes Objekt instanziiert
  • Default-Werte werden gesetzt
  • Value-spezifische Parameter werden initialisiert

Validate Objects erstellen

  • Validierungs-Regeln werden aus den Definitionen geladen
  • Validate-Objekte werden erstellt und konfiguriert
  • Abhängigkeiten zwischen Values und Validates werden hergestellt

Action Objects erstellen

  • Action-Definitionen werden verarbeitet
  • Action-Objekte werden instanziiert
  • Action-Parameter werden gesetzt

3. Validierungs-Phase

Pre-Validation

  • CSRF-Check wird durchgeführt
  • Basis-Validierungen werden ausgeführt
  • Formular-weite Validierungen werden geprüft
  • Custom Pre-Validate Funktionen werden ausgeführt

Value Processing

  • Jedes Value-Objekt wird initialisiert (init())
  • Value-Objekte werden ausgeführt (enterObject())
  • Werte werden in die entsprechenden Pools eingetragen
  • Datei-Uploads werden verarbeitet

Validation Execution

  • Alle Validierungs-Regeln werden geprüft
  • Fehler werden gesammelt
  • Warning-Messages werden generiert
  • Validierungs-Ergebnisse werden in den Objekt-Parametern gespeichert

Post-Validation

  • Value-Pools werden finalisiert
  • Letzte Validierungen werden durchgeführt
  • SQL/Email-Pools werden vorbereitet
  • Validierungs-Status wird final gesetzt

4. Action-Phase

Pre-Actions

  • Vorbereitende Aktionen werden ausgeführt
  • Datenbank-Verbindungen werden vorbereitet
  • Temporäre Daten werden bereinigt

Action Execution

  • SQL-Aktionen werden ausgeführt (Insert/Update/Delete)
  • E-Mails werden gesendet
  • Dateien werden gespeichert
  • Redirects werden vorbereitet

Post-Actions

  • Aufräumarbeiten werden durchgeführt
  • Temporäre Daten werden gelöscht
  • Sessions werden aktualisiert
  • Cache wird ggf. geleert

5. Abschluss

Erfolgreicher Abschluss

  • Erfolgsmeldungen werden generiert
  • Weiterleitungen werden ausgeführt
  • Formulardaten werden zurückgesetzt

Fehlerfall

  • Fehlermeldungen werden vorbereitet
  • Formular wird mit Fehlern neu gerendert
  • Eingegebene Daten werden beibehalten

Besonderheiten

Value Pools

YForm verwendet verschiedene Value-Pools für unterschiedliche Zwecke:

  • value_pool['email']: Werte für E-Mail-Templates
  • value_pool['sql']: Werte für Datenbank-Operationen
  • value_pool['files']: Hochgeladene Dateien

CSRF-Protection

  • Automatischer CSRF-Schutz bei aktivierter Option
  • Token-Generierung und Validierung
  • Konfigurierbare Fehlerbehandlung

Debugging

  • Ausführliche Debug-Ausgaben wenn aktiviert
  • SQL-Debugging möglich
  • Schrittweise Nachverfolgung des Lifecycles

Extension Points

Wichtige Extension Points im Lifecycle:

  • YFORM_INIT
  • YFORM_VALIDATE
  • YFORM_SAVED
  • YFORM_DATA_ADDED
  • YFORM_DATA_UPDATED

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants