# Hauptkomponenten Diese Dokumentation beschreibt die Hauptkomponenten des Frameworks und ihre Verantwortlichkeiten. Jede Komponente ist so konzipiert, dass sie unabhängig verwendet oder durch eine benutzerdefinierte Implementierung ersetzt werden kann. ## Kernkomponenten ### Container Der Container ist das Herzstück des Frameworks und verantwortlich für die Dependency Injection. Er bietet folgende Funktionen: - Registrierung von Diensten - Auflösung von Abhängigkeiten - Verwaltung des Lebenszyklus von Diensten ```php // Beispiel für die Verwendung des Containers $container = new Container(); $container->bind(LoggerInterface::class, FileLogger::class); $container->singleton(DatabaseInterface::class, function () { return new Database(config('database')); }); $logger = $container->get(LoggerInterface::class); ``` ### Router Der Router ist verantwortlich für das Mapping von HTTP-Anfragen zu Controller-Aktionen. Er unterstützt: - Routendefinitionen für verschiedene HTTP-Methoden - Routengruppen mit gemeinsamen Präfixen und Middleware - Routenparameter und Einschränkungen - Namensräume für Routen ```php // Beispiel für die Verwendung des Routers $router = new Router(); $router->get('/users', [UserController::class, 'index']); $router->post('/users', [UserController::class, 'store']); $router->get('/users/{id}', [UserController::class, 'show'])->where('id', '[0-9]+'); $router->group('/admin', function (Router $router) { $router->get('/dashboard', [AdminController::class, 'dashboard']); })->middleware(AuthMiddleware::class); ``` ### Request Die Request-Klasse kapselt eine HTTP-Anfrage und bietet Methoden für den Zugriff auf: - Anfrageparameter - Header - Cookies - Dateien - Sitzungsdaten ```php // Beispiel für die Verwendung der Request-Klasse $name = $request->input('name'); $page = $request->query('page', 1); $token = $request->header('Authorization'); $file = $request->file('avatar'); $remember = $request->cookie('remember', false); $user = $request->session()->get('user'); ``` ### Response Die Response-Klasse repräsentiert eine HTTP-Antwort und bietet Methoden für: - Setzen von Statuscodes - Hinzufügen von Headern - Setzen von Cookies - Umleitung zu anderen URLs ```php // Beispiel für die Verwendung der Response-Klasse $response = new Response('Hello World', 200); $response->header('Content-Type', 'text/plain'); $response->cookie('visited', true, 60 * 24); $redirectResponse = new RedirectResponse('/dashboard'); $jsonResponse = new JsonResponse(['name' => 'John']); $viewResponse = new ViewResponse('welcome', ['user' => $user]); ``` ### Middleware Middleware-Komponenten verarbeiten Anfragen vor und nach der Controller-Aktion. Sie können: - Anfragen validieren - Benutzer authentifizieren - Antworten transformieren - Anfragen protokollieren ```php // Beispiel für eine Middleware class AuthMiddleware implements MiddlewareInterface { public function process(Request $request, RequestHandlerInterface $handler): Response { if (!$this->isAuthenticated($request)) { return new RedirectResponse('/login'); } return $handler->handle($request); } } ``` ## Datenbankkomponenten ### Database Die Database-Komponente bietet eine Abstraktionsschicht für Datenbankoperationen. Sie unterstützt: - Verschiedene Datenbanktypen (MySQL, SQLite, PostgreSQL) - Abfragen mit einem Query Builder - Transaktionen - Migrationen - Seeding ```php // Beispiel für die Verwendung der Database-Komponente $users = $database->table('users') ->where('active', true) ->orderBy('name') ->limit(10) ->get(); $database->transaction(function ($db) { $db->table('users')->insert(['name' => 'John']); $db->table('profiles')->insert(['user_id' => $db->lastInsertId()]); }); ``` ### Model Die Model-Komponente bietet eine objektorientierte Schnittstelle für Datenbankoperationen. Sie unterstützt: - Active Record Pattern - Beziehungen zwischen Modellen - Attribute und Mutators - Ereignisse ```php // Beispiel für die Verwendung der Model-Komponente $user = new User(); $user->name = 'John'; $user->email = 'john@example.com'; $user->save(); $users = User::where('active', true)->get(); $user = User::find(1); $posts = $user->posts()->where('published', true)->get(); ``` ### Migration Die Migration-Komponente ermöglicht die Versionierung der Datenbankstruktur. Sie unterstützt: - Erstellen und Ändern von Tabellen - Hinzufügen und Entfernen von Indizes - Rollback von Änderungen ```php // Beispiel für eine Migration class CreateUsersTable extends Migration { public function up(): void { $this->schema->create('users', function (Blueprint $table) { $table->id(); $table->string('name'); $table->string('email')->unique(); $table->string('password'); $table->boolean('active')->default(true); $table->timestamps(); }); } public function down(): void { $this->schema->dropIfExists('users'); } } ``` ## HTTP-Komponenten ### Controller Controller sind verantwortlich für die Verarbeitung von HTTP-Anfragen und die Rückgabe von Antworten. Sie bieten: - Zugriff auf Request- und Response-Objekte - Validierung von Eingaben - Rendering von Views - Umleitung zu anderen URLs ```php // Beispiel für einen Controller class UserController extends Controller { public function index(Request $request): Response { $users = User::all(); return $this->view('users.index', ['users' => $users]); } public function store(Request $request): Response { $this->validate($request, [ 'name' => 'required|string|max:255', 'email' => 'required|email|unique:users,email', ]); $user = User::create($request->only(['name', 'email'])); return $this->redirect('/users')->with('success', 'User created'); } } ``` ### View Die View-Komponente ist verantwortlich für das Rendering von HTML-Templates. Sie unterstützt: - Template-Dateien mit PHP-Syntax - Layouts und Partials - Template-Vererbung - Datenübergabe an Templates ```php // Beispiel für die Verwendung der View-Komponente $view = new View('users.show'); $view->with('user', $user); $html = $view->render(); // Oder über den Controller return $this->view('users.show', ['user' => $user]); ``` ### Session Die Session-Komponente verwaltet Benutzersitzungen. Sie unterstützt: - Verschiedene Session-Backends (Datei, Datenbank, Redis) - Flash-Daten - Session-Regeneration - Session-Timeout ```php // Beispiel für die Verwendung der Session-Komponente $session = new Session(); $session->put('user_id', 1); $userId = $session->get('user_id'); $session->flash('message', 'Welcome back!'); $session->regenerate(); $session->forget('user_id'); ``` ### Cookie Die Cookie-Komponente verwaltet HTTP-Cookies. Sie unterstützt: - Setzen und Lesen von Cookies - Verschlüsselung von Cookie-Werten - Cookie-Parameter (Lebensdauer, Pfad, Domain, Secure, HttpOnly) ```php // Beispiel für die Verwendung der Cookie-Komponente $cookie = new Cookie('name', 'value', 60 * 24); // 1 Tag $cookie->setPath('/'); $cookie->setSecure(true); $cookie->setHttpOnly(true); $response->setCookie($cookie); $value = $request->cookie('name'); ``` ## Sicherheitskomponenten ### Validator Die Validator-Komponente validiert Benutzereingaben. Sie unterstützt: - Verschiedene Validierungsregeln - Benutzerdefinierte Validierungsregeln - Fehlermeldungen - Validierung von Arrays und verschachtelten Daten ```php // Beispiel für die Verwendung der Validator-Komponente $validator = new Validator($data, [ 'name' => 'required|string|max:255', 'email' => 'required|email|unique:users,email', 'password' => 'required|string|min:8|confirmed', 'age' => 'integer|min:18', ]); if ($validator->fails()) { $errors = $validator->errors(); // Fehler behandeln } ``` ### Authentication Die Authentication-Komponente verwaltet die Benutzerauthentifizierung. Sie unterstützt: - Verschiedene Authentifizierungsmethoden (Session, Token, Basic) - Mehrere Authentifizierungsquellen - Remember-Me-Funktionalität - Passwort-Hashing und -Verifizierung ```php // Beispiel für die Verwendung der Authentication-Komponente $auth = new Authentication(); if ($auth->attempt(['email' => $email, 'password' => $password], $remember)) { // Erfolgreiche Anmeldung } $user = $auth->user(); $auth->logout(); ``` ### Authorization Die Authorization-Komponente verwaltet die Benutzerautorisierung. Sie unterstützt: - Rollenbasierte Zugriffskontrolle - Fähigkeitsbasierte Zugriffskontrolle - Richtlinien für komplexe Autorisierungslogik ```php // Beispiel für die Verwendung der Authorization-Komponente $authorization = new Authorization(); $authorization->define('edit-post', function (User $user, Post $post) { return $user->id === $post->user_id || $user->hasRole('editor'); }); if ($authorization->can($user, 'edit-post', $post)) { // Benutzer darf den Beitrag bearbeiten } ``` ### CSRF Die CSRF-Komponente schützt vor Cross-Site Request Forgery. Sie unterstützt: - Generierung von CSRF-Tokens - Validierung von CSRF-Tokens - Automatische Integration in Formulare ```php // Beispiel für die Verwendung der CSRF-Komponente $csrf = new CsrfProtection(); $token = $csrf->generateToken(); // In einem Formular echo ''; // Validierung if (!$csrf->validateToken($request->input('_token'))) { // Ungültiges Token } ``` ### WAF Die Web Application Firewall (WAF) schützt vor gängigen Angriffen. Sie unterstützt: - Erkennung und Blockierung von SQL-Injection - Erkennung und Blockierung von XSS - Erkennung und Blockierung von Command Injection - Erkennung und Blockierung von Path Traversal - Maschinelles Lernen zur Erkennung von Anomalien ```php // Beispiel für die Verwendung der WAF-Komponente $waf = new WebApplicationFirewall(); $waf->addRule(new SqlInjectionRule()); $waf->addRule(new XssRule()); if ($waf->detect($request)) { // Angriff erkannt $waf->block($request); } ``` ## Weitere Komponenten ### Cache Die Cache-Komponente bietet eine einheitliche Schnittstelle für verschiedene Cache-Backends. Sie unterstützt: - Verschiedene Cache-Treiber (Datei, Redis, Memcached, Memory) - Cache-Tags - Cache-Invalidierung - Cache-Prefixing ```php // Beispiel für die Verwendung der Cache-Komponente $cache = new Cache(); $cache->put('key', 'value', 60); // 60 Minuten $value = $cache->get('key', 'default'); $cache->has('key'); $cache->forget('key'); $cache->flush(); $cache->tags(['users', 'profiles'])->put('user:1', $user, 60); ``` ### Logger Die Logger-Komponente protokolliert Anwendungsereignisse. Sie unterstützt: - Verschiedene Log-Level (Debug, Info, Warning, Error, Critical) - Verschiedene Log-Handler (Datei, Syslog, Slack, E-Mail) - Kontextdaten für Log-Einträge - Log-Rotation ```php // Beispiel für die Verwendung der Logger-Komponente $logger = new Logger(); $logger->debug('Debug-Nachricht'); $logger->info('Info-Nachricht'); $logger->warning('Warnung', ['user_id' => 1]); $logger->error('Fehler', ['exception' => $exception]); $logger->critical('Kritischer Fehler', ['data' => $data]); ``` ### Event Die Event-Komponente implementiert ein Publish-Subscribe-Muster. Sie unterstützt: - Ereignisregistrierung und -auslösung - Ereignislistener - Ereignisabonnenten - Ereignispriorisierung ```php // Beispiel für die Verwendung der Event-Komponente $eventDispatcher = new EventDispatcher(); $eventDispatcher->addListener(UserRegistered::class, SendWelcomeEmail::class); $eventDispatcher->addListener(UserRegistered::class, function (UserRegistered $event) { // Benutzerdefinierte Logik }); $eventDispatcher->dispatch(new UserRegistered($user)); ``` ### Console Die Console-Komponente bietet ein Kommandozeilen-Interface für die Anwendung. Sie unterstützt: - Benutzerdefinierte Befehle - Eingabeargumente und -optionen - Interaktive Eingabe - Ausgabeformatierung ```php // Beispiel für einen Konsolenbefehl class MigrateCommand extends Command { protected string $name = 'db:migrate'; protected string $description = 'Run database migrations'; public function handle(Input $input, Output $output): int { $output->writeln('Running migrations...'); // Migrationen ausführen $output->success('Migrations completed successfully'); return 0; } } ``` ### Filesystem Die Filesystem-Komponente bietet eine Abstraktionsschicht für Dateisystemoperationen. Sie unterstützt: - Lokale und entfernte Dateisysteme - Datei- und Verzeichnisoperationen - Dateimetadaten - Dateispeicherung und -abruf ```php // Beispiel für die Verwendung der Filesystem-Komponente $filesystem = new Filesystem(); $filesystem->write('path/to/file.txt', 'Inhalt'); $content = $filesystem->read('path/to/file.txt'); $filesystem->delete('path/to/file.txt'); $filesystem->createDirectory('path/to/directory'); $files = $filesystem->listContents('path/to/directory'); ``` ### Queue Die Queue-Komponente ermöglicht die asynchrone Verarbeitung von Aufgaben. Sie unterstützt: - Verschiedene Queue-Treiber (Datenbank, Redis, Beanstalkd) - Verzögerte Aufgaben - Aufgabenpriorisierung - Fehlerbehandlung und Wiederholungsversuche ```php // Beispiel für die Verwendung der Queue-Komponente $queue = new Queue(); $queue->push(new SendEmailJob($user, $message)); $queue->later(60, new CleanupJob()); // 60 Sekunden verzögert // Verarbeitung einer Aufgabe class SendEmailJob implements JobInterface { public function __construct(private User $user, private string $message) {} public function handle(): void { // E-Mail senden } } ``` ## Weitere Informationen - [Architekturübersicht](overview.md): Überblick über die Architektur des Frameworks. - [Entwurfsmuster](patterns.md): Erläuterung der im Framework verwendeten Entwurfsmuster. - [Komponentendokumentation](../components/README.md): Detaillierte Dokumentation der einzelnen Komponenten.