Zum Inhalt springen

Übersicht der Config-Klasse

Die Klasse Config unter /app/Config.php liefert die zentralen Konfigurationseinstellungen, die zum Betrieb einer DotApp-Anwendung erforderlich sind. Sie enthält Standardwerte, damit das Framework reibungslos läuft; typischerweise müssen Sie nur wenige Schlüsselparameter anpassen, etwa Datenbank, Anwendungsname und Verschlüsselungsschlüssel.

Wichtig: Der Verschlüsselungsschlüssel (c_enc_key) dient dem Schutz von Passwörtern und sensiblen Daten. Nach dem Setzen sollte er nicht geändert werden, da sonst alle verschlüsselten Daten, etwa Benutzerpasswörter, zurückgesetzt werden müssten.

Grundeinstellungen

Um eine DotApp-Anwendung auszuführen, müssen Sie das Stammverzeichnis in index.php definieren, wenn die Anwendung in einem Unterverzeichnis gehostet wird. Andernfalls wird standardmäßig das aktuelle Verzeichnis verwendet.


define('__ROOTDIR__', "path/to/your/application"); // Set this only if the application runs in a subdirectory
    

Eigene Konfigurationseinstellungen werden in /app/config.php definiert. Diese Datei erlaubt es, Standardwerte zu überschreiben und das Framework an Ihre Anforderungen anzupassen.

Sitzungskonfiguration

DotApp bietet ein robustes Sitzungsverwaltungssystem mit anpassbaren Einstellungen. Nachfolgend die Standardoptionen der Sitzungskonfiguration, wie sie in /app/config.php definiert sind:


'session' => [
    'driver' => 'default', // Default session driver
    'lifetime' => 3600, // Session expiration in seconds
    'rm_always_use' => false, // Always use "Remember Me" functionality?
    'rm_autologin' => false, // Enable automatic autologin?
    'rm_lifetime' => 2592000, // Remember Me lifetime (30 days)
    'cookie_name' => 'dotapp_session', // Session cookie name
    'path' => '/', // Cookie path
    'secure' => false, // Restrict to HTTPS
    'httponly' => true, // Prevent XSS attacks
    'samesite' => 'Strict', // Prevent CSRF attacks
    'database_use' => false, // Use database for session storage?
    'database_table' => 'users_sessions', // Table for database sessions
    'redis_host' => '127.0.0.1', // Redis host
    'redis_port' => 6379, // Redis port
    'redis_timeout' => 2, // Redis connection timeout
    'redis_password' => '', // Redis password
    'redis_persistent' => false, // Persistent Redis connection
    'redis_database' => 0, // Redis database number
    'redis_prefix' => 'session:', // Redis session prefix
    'file_driver_dir' => '/app/runtime/SessionDriverFile', // Directory for SessionDriverFile
    'file_driver_dir2' => '/app/runtime/SessionDriverFile2', // Directory for SessionDriverFile2
]
    

Um Sitzungseinstellungen anzupassen, verwenden Sie die Methode Config::session. Zum Beispiel:


Config::session("lifetime", 30 * 24 * 3600); // Set session lifetime to 30 days
Config::session("rm_autologin", true); // Enable automatic autologin
    

Sitzungstreiber

DotApp unterstützt mehrere Sitzungstreiber, sodass Sie den Speichermechanismus wählen können, der am besten zu Ihrer Anwendung passt. Wichtig: Die Sitzungseinstellungen müssen vor der Definition des Treibers konfiguriert werden, weil der Treiber diese Einstellungen bei der Initialisierung verwendet.

Verfügbare Treiber

  • Standardtreiber (SessionDriverDefault): Verwendet den integrierten PHP-Mechanismus $_SESSION.
  • Dateitreiber (SessionDriverFile): Speichert Sitzungen in Dateien im Verzeichnis aus file_driver_dir. Erfordert einen CRON-Job für die Garbage Collection.
  • Dateitreiber 2 (SessionDriverFile2): Ähnlich wie SessionDriverFile, speichert jedoch jedes Cookie in eigenen Dateien — ideal bei vielen Cookies. Verwendet file_driver_dir2. Erfordert einen CRON-Job für die Garbage Collection.
  • Datenbanktreiber (SessionDriverDB): Speichert Sitzungen in einer Datenbank, ideal für lastverteilte Umgebungen. Verwendet die Tabelle <prefix>users_sessions (Standardpräfix: dotapp_).
  • Redis-Treiber (SessionDriverRedis): Nutzt Redis für schnelle, zentrale Sitzungsspeicherung, geeignet für lastverteilte Setups.

Einen Treiber setzen Sie mit der Methode Config::sessionDriver, nachdem die Sitzungseinstellungen konfiguriert sind:


Config::sessionDriver("default", SessionDriverDefault::driver()); // Default $_SESSION driver
Config::sessionDriver("default", SessionDriverFile::driver()); // File-based driver
Config::sessionDriver("default", SessionDriverFile2::driver()); // File-based driver with multiple files
Config::sessionDriver("default", SessionDriverDB::driver()); // Database driver
Config::sessionDriver("default", SessionDriverRedis::driver()); // Redis driver
    

Einrichtung des Datenbanktreibers

Für den Datenbanktreiber müssen Sie die Tabelle <prefix>users_sessions anlegen. Nachfolgend das SQL zum Erstellen:


CREATE TABLE IF NOT EXISTS `dotapp_users_sessions` (
  `session_id` varchar(64) NOT NULL,
  `sessname` varchar(255) NOT NULL,
  `values` longtext NOT NULL,
  `variables` longtext NOT NULL,
  `expiry` bigint NOT NULL,
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`session_id`,`sessname`),
  KEY `idx_expiry` (`expiry`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
    

Um das Tabellenpräfix zu ändern:


Config::db("prefix", "your_prefix_");
    

Konfiguration des Redis-Treibers

Um den Redis-Treiber zu konfigurieren, aktualisieren Sie die relevanten Einstellungen mit Config::session. Zum Beispiel:


Config::session("redis_host", "your IP"); // Redis host
Config::session("redis_port", 6379); // Redis port
Config::session("redis_timeout", 2); // Redis connection timeout
Config::session("redis_password", "your_password"); // Redis password
Config::session("redis_persistent", false); // Persistent Redis connection
Config::session("redis_database", 0); // Redis database number
Config::session("redis_prefix", "session:"); // Redis session prefix
    

Anwendungskonfiguration

DotApp erlaubt die Konfiguration zentraler Anwendungseinstellungen wie Anwendungsname, Verschlüsselungsschlüssel und Version. Nachfolgend die Standardwerte:


'app' => [
    'name' => 'dotApp123456',
    'name_hash' => '', // Do not modify directly
    'c_enc_key' => 'K9xP7mW3qT2rY6vL8cF4hD5aE0zJ1nB2X7bP9qRtY2mW4kZjN6vL8cF3hD5aE0xQ', // Encryption key
    'version' => '1.0',
]
    

Um diese Einstellungen anzupassen, verwenden Sie die Methode Config::app:


Config::app("name", "Your Application Name"); // Set application name
Config::app("c_enc_key", "YourStrongEncryptionKey"); // Set a strong encryption key
Config::app("version", "0.1 alpha"); // Set application version
    

Wichtig: Der Verschlüsselungsschlüssel (c_enc_key) muss stark und sicher sein, da er zum Verschlüsseln sensibler Daten verwendet wird. Vermeiden Sie eine Änderung nach der Ersteinrichtung, um Probleme mit vorhandenen verschlüsselten Daten zu verhindern.

Datenbankkonfiguration

DotApp unterstützt mehrere Datenbanktreiber (PDO und MySQLi) und erlaubt die Konfiguration mehrerer Datenbanken. Eine Datenbank fügen Sie mit der Methode Config::addDatabase hinzu:


Config::addDatabase("main", "127.0.0.1", "dotsystems", "dotsystems", "dotsystems", "UTF8", "MYSQL", "pdo");
    

Damit wird eine Datenbank namens main mit dem PDO-Treiber und MySQL konfiguriert. Unterstützte PDO-Datenbanktypen sind mysql, pgsql, sqlite, oci und sqlsrv.

Standard-Datenbankeinstellungen:


'db' => [
    'prefix' => 'dotapp_', // Database table prefix
    'driver' => 'pdo', // Default driver
    'maindb' => 'main' // Default database name
]
    

Die Datenbank main wird standardmäßig in der gesamten Anwendung verwendet, sofern keine andere Datenbank angegeben ist. Um die Standarddatenbank für alle Module zu wechseln:


Config::db("maindb", "anotherdb");
Config::addDatabase("anotherdb", "127.0.0.1", "dotsystems2", "dotsystems2", "dotsystems2", "UTF8", "MYSQL", "pdo");
    

Um den Standardtreiber zu ändern:


Config::db("driver", "mysqli");
    

Wichtig: Jeder Treiber verwaltet eigene Datenbankzugangsdaten. Eine für PDO konfigurierte Datenbank kann nicht mit MySQLi verwendet werden, sofern sie nicht neu konfiguriert wird. Zum Beispiel:


// Incorrect: Mixing PDO database with MySQLi driver
Config::db("driver", "mysqli");
Config::db("maindb", "anotherdb");
Config::addDatabase("anotherdb", "127.0.0.1", "dotsystems2", "dotsystems2", "dotsystems2", "UTF8", "MYSQL", "pdo");

// Correct: Matching driver and database
Config::db("driver", "mysqli");
Config::db("maindb", "anotherdb");
Config::addDatabase("anotherdb", "127.0.0.1", "dotsystems2", "dotsystems2", "dotsystems2", "UTF8", "MYSQL", "mysqli");
    

Abfragen verwenden die konfigurierte Standarddatenbank:


DB::module('RAW')->q(function ($qb) {
    $qb->select('*', 'shop_items')->limit(20);
})->all();
    

Modulkonfiguration

DotApp erlaubt modulspezifische Konfiguration mit der Methode Config::module, die Getter- und Setter-Funktionen für Moduleinstellungen bereitstellt.

Beispiel zum Setzen und Lesen der Modulkonfiguration:


Config::module("crm", "title", "CRM PAGE TITLE"); // Set module configuration
$title = Config::module("crm", "title"); // Get module configuration
    

So können Modulautoren anpassbare Einstellungen bereitstellen und die Konfigurationen trotzdem modulbezogen und übersichtlich halten.

Zwei-Faktor-Authentifizierung (2FA)

DotApp unterstützt Zwei-Faktor-Authentifizierung (2FA) mit TOTP (Time-based One-Time Password). Die Standardwerte sind:


'totp' => [
    'issuer' => 'DotApp',
    'algorithm' => 'SHA256',
    'digits' => 6,
    'period' => 30,
]
    

Um den 2FA-Issuer anzupassen (z. B. für die Anzeige in Authenticator-Apps):


Config::totp("issuer", "MyApp");
    

Die übrigen Einstellungen (Algorithmus, Ziffern, Periode) sollten in der Regel unverändert bleiben. Eine 2FA-Konfiguration ist nur erforderlich, wenn Ihre Anwendung Zwei-Faktor-Authentifizierung beim Login verwendet.

Konfigurationsbeispiele

Praktische Beispiele zur Konfiguration von DotApp, einschließlich Sitzungstreibern, Datenbankeinrichtung und Modulkonfiguration, finden Sie im Abschnitt Beispiele. Diese Beispiele zeigen, wie Sie die hier beschriebenen Einstellungen in realen Szenarien anwenden.