diff --git a/init.php b/init.php index d7fdaed..b6e6e36 100644 --- a/init.php +++ b/init.php @@ -24,30 +24,29 @@ $baseDir = getcwd() . DIRECTORY_SEPARATOR . $projectName; $dirs = [ '', 'WEBROOT', - 'public/api', - 'public/api/v1', + 'WEBROOT/api', + 'WEBROOT/api/v1', 'WEBROOT/commands', - 'public/static', + 'WEBROOT/static', 'WEBROOT/src', - 'config', - 'src/config', - 'src/database', - 'src/utils', - 'src/MVC', - 'src/MVC/Core', - 'src/MVC/Classes', - 'src/MVC/Controller', - 'src/MVC/Model', - 'src/MVC/View', - 'src/MVC/View/admin', - 'src/MVC/View/templates', - 'src/MVC/Middleware', - 'src/MVC/Layout', - 'src/MVC/Layout/Templates', - 'src/MVC/Layout/Block', - 'storage', - 'storage/uploads', - 'storage/logs', + 'WEBROOT/src/config', + 'WEBROOT/src/database', + 'WEBROOT/src/utils', + 'WEBROOT/src/MVC', + 'WEBROOT/src/MVC/Core', + 'WEBROOT/src/MVC/Classes', + 'WEBROOT/src/MVC/Controller', + 'WEBROOT/src/MVC/Model', + 'WEBROOT/src/MVC/View', + 'WEBROOT/src/MVC/View/admin', + 'WEBROOT/src/MVC/View/templates', + 'WEBROOT/src/MVC/Middleware', + 'WEBROOT/src/MVC/Layout', + 'WEBROOT/src/MVC/Layout/Templates', + 'WEBROOT/src/MVC/Layout/Block', + 'WEBROOT/storage', + 'WEBROOT/storage/uploads', + 'WEBROOT/logs', ]; foreach ($dirs as $dir) { @@ -65,13 +64,13 @@ $files['server.php'] = <<<'PHP' $file, 'size' => round(filesize($path) / 1024, 2), 'date' => date('Y-m-d H:i:s', filemtime($path)) @@ -1061,7 +1060,7 @@ $files[] = [ PHP; // --- CORE --- -$files['src/MVC/Core/Controller.php'] = <<<'PHP' +$files['WEBROOT/src/MVC/Core/Controller.php'] = <<<'PHP' @@ -1627,7 +1626,7 @@ $files['src/MVC/Layout/Templates/main.php'] = <<<'HTML' HTML; // --- CONTROLLERS --- -$files['src/MVC/Controller/AdminController.php'] = <<<'PHP' +$files['WEBROOT/src/MVC/Controller/AdminController.php'] = <<<'PHP' đź“§ E-Mail Service
Willkommen in deinem neuen MVC-System mit integriertem Header.
"; -$files['src/MVC/View/test1.php'] = "= \$msg ?>
"; -$files['src/MVC/View/test2.php'] = "Willkommen in deinem neuen MVC-System mit integriertem Header.
"; -$files['src/MVC/View/docs.php'] = <<<'HTML' +$files['WEBROOT/src/MVC/View/test1.php'] = "= \$msg ?>
"; + +$files['WEBROOT/src/MVC/View/test2.php'] = "Der Weg einer Anfrage durch das Framework ist linear und vorhersehbar:
-public/index.php.autoloader lädt Klassen
- nach Bedarf.Router lädt die routes.php und prüft
- den GET['service'] Parameter.auth) werden ausgefĂĽhrt.$this->render() auf.Der Weg einer Anfrage durch das Framework ist linear und vorhersehbar:
+WEBROOT/index.php.autoloader lädt Klassen
+ nach Bedarf.Router lädt die routes.php und prüft
+ den GET['service'] Parameter.auth) werden ausgeführt.$this->render() auf.- ├── Framework.code-workpace - ├── README.md - ├── init.php - └── /WEBROOT - ├── /api - | └── /v1 - ├── /src - | ├── /config - | ├── /database - | ├── /MVC - | ├── /Core - | ├── /Classes - | ├── /Controller - | ├── /Model - | ├── /View - | └── /Layout - | └── /Templates - ├── /commands - ├── /static - ├── /storage - └── /logs -+
+├── Framework.code-workpace +├── README.md +├── init.php +└── /WEBROOT + ├── /api + | └── /v1 + ├── /src + | ├── /config + | ├── /database + | ├── /MVC + | ├── /Core + | ├── /Classes + | ├── /Controller + | ├── /Model + | ├── /View + | └── /Layout + | └── /Templates + ├── /commands + ├── /static + ├── /storage + └── /logs +-
Das Framework nutzt einen PSR-4 kompatiblen Autoloader in src/MVC/autoloader.php.
-
// Automatische Auflösung:
- // MVC\Classes\Auth -> src/MVC/Classes/Auth.php
- // MVC\Core\Router -> src/MVC/Core/Router.php
- Das Framework nutzt einen PSR-4 kompatiblen Autoloader in src/MVC/autoloader.php.
+
// Automatische Auflösung:
+// MVC\Classes\Auth -> src/MVC/Classes/Auth.php
+// MVC\Core\Router -> src/MVC/Core/Router.php
+ Routen werden zentral in src/config/routes.php definiert.
$router->add('home', \MVC\Controller\HomeController::class, 'index');
- Routen werden zentral in src/config/routes.php definiert.
$router->add('home', \MVC\Controller\HomeController::class, 'index');
+ Middlewares sind Klassen, die vor dem eigentlichen Controller ausgefĂĽhrt werden. Sie dienen der - Validierung von Requests, Authentifizierung oder Logging.
+Middlewares sind Klassen, die vor dem eigentlichen Controller ausgefĂĽhrt werden. Sie dienen der + Validierung von Requests, Authentifizierung oder Logging.
-Diese werden bei jedem Request ausgefĂĽhrt (z.B. IP-Blocker oder globales - Logging):
-$router->addGlobal('block');
- $router->addGlobal('global');
+ Diese werden bei jedem Request ausgefĂĽhrt (z.B. IP-Blocker oder globales + Logging):
+$router->addGlobal('block');
+$router->addGlobal('global');
- Diese werden nur fĂĽr bestimmte Services definiert:
-// Erfordert Login ('auth') und Admin-Status ('admin')
- $router->add('admin', Controller::class, 'index', ['auth', 'admin']);
+ Diese werden nur fĂĽr bestimmte Services definiert:
+// Erfordert Login ('auth') und Admin-Status ('admin')
+$router->add('admin', Controller::class, 'index', ['auth', 'admin']);
- | Name | -Klasse | -Funktion | -
|---|---|---|
auth |
- AuthMiddleware |
- PrĂĽft, ob der User eingeloggt ist ($_SESSION['user_logged_in']). |
-
admin |
- AdminMiddleware |
- PrĂĽft auf Administrator-Rechte ($_SESSION['is_admin']). |
-
block |
- BlockMiddleware |
- Einfacher IP-Blocker fĂĽr gesperrte Adressen. | -
global |
- EveryRequestMiddleware |
- Platzhalter fĂĽr Logik, die immer laufen soll. | -
| Name | +Klasse | +Funktion | +
|---|---|---|
auth |
+ AuthMiddleware |
+ PrĂĽft, ob der User eingeloggt ist ($_SESSION['user_logged_in']). |
+
admin |
+ AdminMiddleware |
+ PrĂĽft auf Administrator-Rechte ($_SESSION['is_admin']). |
+
block |
+ BlockMiddleware |
+ Einfacher IP-Blocker fĂĽr gesperrte Adressen. | +
global |
+ EveryRequestMiddleware |
+ Platzhalter fĂĽr Logik, die immer laufen soll. | +
src/MVC/Middleware/.MiddlewareInterface.src/MVC/Core/Middleware.php.src/MVC/Middleware/.MiddlewareInterface.src/MVC/Core/Middleware.php.Sichere DB-Operationen via src/utils/databaseMethods.php unter Verwendung von
- Prepared Statements:
DatabaseShow($table, $cols, $where, ...$values)DatabaseInsert($table, $cols, ...$values)DatabaseUpdate($table, $set, $where, ...$values)DatabaseDelete($table, $where, ...$values)Sichere DB-Operationen via src/utils/databaseMethods.php unter Verwendung von
+ Prepared Statements:
DatabaseShow($table, $cols, $where, ...$values)DatabaseInsert($table, $cols, ...$values)DatabaseUpdate($table, $set, $where, ...$values)DatabaseDelete($table, $where, ...$values)Ermöglicht objektorientierte DB-Zugriffe durch Vererbung.
-class User extends \MVC\Core\Model {
- protected static $table = "Users";
- }
- $allUsers = User::all();
- Ermöglicht objektorientierte DB-Zugriffe durch Vererbung.
+class User extends \MVC\Core\Model {
+ protected static $table = "Users";
+}
+$allUsers = User::all();
+ Das Script install_db.php automatisiert das gesamte DB-Setup:
env.ini).
- Users (mit Admin-Account) und
- Mailing an.
- Das Script install_db.php automatisiert das gesamte DB-Setup:
env.ini).
+ Users (mit Admin-Account) und
+ Mailing an.
+ Das Framework nutzt ein flexibles Block-System in MVC\Layout\Layout:
$layout = new Layout('main');
- $layout->setBlock('title', 'Mein Titel');
- $layout->setBlock('content', 'HTML-Inhalt');
- echo $layout->render();
- Das Framework nutzt ein flexibles Block-System in MVC\Layout\Layout:
$layout = new Layout('main');
+$layout->setBlock('title', 'Mein Titel');
+$layout->setBlock('content', 'HTML-Inhalt');
+echo $layout->render();
+ Die MVC\Core\View Klasse extrahiert Daten-Arrays direkt in PHP-Templates:
// Im Controller:
- return $this->render('home', ['name' => 'Max']);
+
+ 4.2 View System
+ Die MVC\Core\View Klasse extrahiert Daten-Arrays direkt in PHP-Templates:
+ // Im Controller:
+return $this->render('home', ['name' => 'Max']);
- // In src/MVC/View/home.php:
- <h1>Hallo <?= $name ?></h1>
-
+// In src/MVC/View/home.php:
+<h1>Hallo <?= $name ?></h1>
+ UnterstĂĽtzt nahtlose Umschaltung zwischen Light- und DarkMode:
-$_SESSION['theme']..dark-mode am <html>
- Tag schaltet CSS-Variablen um.toggle_theme steuerbar.UnterstĂĽtzt nahtlose Umschaltung zwischen Light- und DarkMode:
+$_SESSION['theme']..dark-mode am <html>
+ Tag schaltet CSS-Variablen um.toggle_theme steuerbar.Zentrales Identitätsmanagement:
-Auth::login($user, $pass); // Login-Versuch
- Auth::check(); // Eingeloggt?
- Auth::isAdmin(); // Admin-Rechte?
- Auth::user(); // Gibt User-Array zurĂĽck
- Zentrales Identitätsmanagement:
+Auth::login($user, $pass); // Login-Versuch
+Auth::check(); // Eingeloggt?
+Auth::isAdmin(); // Admin-Rechte?
+Auth::user(); // Gibt User-Array zurĂĽck
+ Erstellt konsistente HTML-Formulare mit Bootstrap-ähnlichem Styling:
-echo Form::open('service_name');
- echo Form::input('email', 'E-Mail', 'email');
- echo Form::textarea('msg', 'Nachricht');
- echo Form::submit('Senden');
- echo Form::close();
- Erstellt konsistente HTML-Formulare mit Bootstrap-ähnlichem Styling:
+echo Form::open('service_name');
+echo Form::input('email', 'E-Mail', 'email');
+echo Form::textarea('msg', 'Nachricht');
+echo Form::submit('Senden');
+echo Form::close();
+ Abstraktionslayer fĂĽr das Dateisystem:
-Storage::upload('file_input') speichert sicher in
- /storage/uploads/.
- Storage::download('path/to/file') erzwingt
- Datei-Download mit korrekten Headern.Storage::listFiles() gibt Array aller verfĂĽgbaren
- Dateien zurĂĽck.Abstraktionslayer fĂĽr das Dateisystem:
+Storage::upload('file_input') speichert sicher in
+ /storage/uploads/.
+ Storage::download('path/to/file') erzwingt
+ Datei-Download mit korrekten Headern.Storage::listFiles() gibt Array aller verfĂĽgbaren
+ Dateien zurĂĽck.Versand von System-Mails:
-Mailing
- protokolliert.logs/mails.log.
- error() Methode fĂĽr kritische
- Systembenachrichtigungen.Versand von System-Mails:
+Mailing
+ protokolliert.logs/mails.log.
+ error() Methode fĂĽr kritische
+ Systembenachrichtigungen.Zentrales Fehler-Management:
-storage/logs/error.log.
- Logger::log('Nachricht', 'LEVEL') fĂĽr eigenes
- Logging.Zentrales Fehler-Management:
+WEBROOT/logs/error.log.
+ Logger::log('Nachricht', 'LEVEL') fĂĽr eigenes
+ Logging.Das Schweizer Taschenmesser fĂĽr die Entwicklung:
--c, --controller: Nur den Controller erstellen.-v, --view: Nur die View erstellen.-r, --route: Nur die Route registrieren.-n, --nav: Nur den Navigationspunkt hinzufĂĽgen.-a, --auth: Erfordert Login fĂĽr diesen Service.-l, --label "Text": Anzeigename in der Sidebar.How to Use:
-php make.php module [Name]: Erstellt Controller, View, Route und Nav-Eintrag in
- einem Rutsch.php make.php model [Tabelle] [Spalten]: Generiert fertige Model-Klassen inkl.
- Spaltendokumentation.Das Schweizer Taschenmesser fĂĽr die Entwicklung:
+-c, --controller: Nur den Controller erstellen.-v, --view: Nur die View erstellen.-r, --route: Nur die Route registrieren.-n, --nav: Nur den Navigationspunkt hinzufĂĽgen.-a, --auth: Erfordert Login fĂĽr diesen Service.-l, --label "Text": Anzeigename in der Sidebar.How to Use:
+php make.php module [Name]: Erstellt Controller, View, Route und Nav-Eintrag in
+ einem Rutsch.php make.php model [Tabelle] [Spalten]: Generiert fertige Model-Klassen inkl.
+ Spaltendokumentation.Standardisierte JSON-Antworten ĂĽber die Api Klasse:
// In src/MVC/Classes/Api.php
- Api::jsonResponse(['data' => '...'], 200);
- API-Files befinden sich ĂĽbersichtlich in public/api/v1/.
Standardisierte JSON-Antworten ĂĽber die Api Klasse:
// In src/MVC/Classes/Api.php
+Api::jsonResponse(['data' => '...'], 200);
+ API-Files befinden sich ĂĽbersichtlich in WEBROOT/api/v1/.
htmlspecialchars()
- maskieren.htmlspecialchars()
+ maskieren.| ID | -Name | -Status | -Datum | -Aktionen | -
|---|---|---|---|---|
| #= 1000 + $i ?> | -Beispiel Datensatz = $i ?> | -Aktiv | -= date('d.m.Y') ?> | -- - - | -
| ID | +Name | +Status | +Datum | +Aktionen | +
|---|---|---|---|---|
| #= 1000 + $i ?> | +Beispiel Datensatz = $i ?> | +Aktiv | += date('d.m.Y') ?> | ++ + + | +
| Dateiname | -Größe | -Datum | -Aktion | -
|---|---|---|---|
| Keine Dateien - verfĂĽgbar. | -|||
| = htmlspecialchars($file['name']) ?> | -= htmlspecialchars($file['size']) ?> KB | -= htmlspecialchars($file['date']) ?> | -- đź’ľ Download - | -
| Dateiname | +Größe | +Datum | +Aktion | +
|---|---|---|---|
| Keine Dateien + verfĂĽgbar. | +|||
| = htmlspecialchars($file['name']) ?> | += htmlspecialchars($file['size']) ?> KB | += htmlspecialchars($file['date']) ?> | ++ đź’ľ Download + | +
= htmlspecialchars(\$message) ?>
-Hier kannst du nun dein Projekt aufbauen.
-= htmlspecialchars(\$message) ?>
+Hier kannst du nun dein Projekt aufbauen.
+