Files
michaelschiemer/docs/getting-started/first-steps.md
Michael Schiemer 55a330b223 Enable Discovery debug logging for production troubleshooting
- Add DISCOVERY_LOG_LEVEL=debug
- Add DISCOVERY_SHOW_PROGRESS=true
- Temporary changes for debugging InitializerProcessor fixes on production
2025-08-11 20:13:26 +02:00

328 lines
8.6 KiB
Markdown

# Erste Schritte
Diese Anleitung führt Sie durch die ersten Schritte mit dem Framework, nachdem Sie es [installiert](installation.md) und [konfiguriert](configuration.md) haben.
## Projektstruktur
Zunächst sollten Sie sich mit der Projektstruktur vertraut machen:
```
my-project/
├── bin/ # Ausführbare Skripte
├── config/ # Konfigurationsdateien
├── docs/ # Dokumentation
├── public/ # Öffentlich zugängliche Dateien
│ ├── index.php # Einstiegspunkt für die Anwendung
│ ├── assets/ # Kompilierte Assets (CSS, JS)
│ └── uploads/ # Hochgeladene Dateien
├── resources/ # Quellressourcen
│ ├── css/ # CSS-Dateien
│ ├── js/ # JavaScript-Dateien
│ └── views/ # Template-Dateien
├── src/ # PHP-Quellcode
│ ├── Application/ # Anwendungsspezifischer Code
│ │ ├── Controllers/ # Controller
│ │ ├── Models/ # Modelle
│ │ └── Services/ # Services
│ └── Framework/ # Framework-Code
│ ├── Core/ # Kernkomponenten
│ ├── Database/ # Datenbankabstraktion
│ └── Http/ # HTTP-Komponenten
├── storage/ # Speicher für Anwendungsdaten
│ ├── cache/ # Cache-Dateien
│ ├── logs/ # Log-Dateien
│ └── uploads/ # Hochgeladene Dateien
├── tests/ # Testdateien
├── vendor/ # Composer-Abhängigkeiten
├── .env # Umgebungsvariablen
├── composer.json # Composer-Konfiguration
├── console.php # Kommandozeilen-Interface
└── README.md # Projektdokumentation
```
## Erstellen einer einfachen Seite
Lassen Sie uns eine einfache Seite erstellen, um zu sehen, wie das Framework funktioniert.
### 1. Erstellen eines Controllers
Erstellen Sie eine neue Datei `src/Application/Controllers/WelcomeController.php`:
```php
<?php
namespace App\Application\Controllers;
use App\Framework\Http\Controller;
use App\Framework\Http\Request;
use App\Framework\Http\Response;
class WelcomeController extends Controller
{
public function index(Request $request): Response
{
return $this->view('welcome', [
'title' => 'Willkommen',
'message' => 'Willkommen beim Framework!',
]);
}
}
```
### 2. Erstellen einer View
Erstellen Sie eine neue Datei `resources/views/welcome.php`:
```php
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title><?= $title ?></title>
<link rel="stylesheet" href="/assets/css/app.css">
</head>
<body>
<div class="container">
<h1><?= $title ?></h1>
<p><?= $message ?></p>
</div>
<script src="/assets/js/app.js"></script>
</body>
</html>
```
### 3. Definieren einer Route
Öffnen Sie die Datei `config/routes.php` und fügen Sie eine neue Route hinzu:
```php
<?php
use App\Application\Controllers\WelcomeController;
use App\Framework\Routing\Router;
return function (Router $router) {
$router->get('/', [WelcomeController::class, 'index']);
};
```
### 4. Testen der Anwendung
Starten Sie den eingebauten Entwicklungsserver:
```bash
php console.php serve
```
Öffnen Sie dann Ihren Browser und navigieren Sie zu `http://localhost:8000`. Sie sollten Ihre neue Seite sehen.
## Erstellen einer API-Endpunkt
Lassen Sie uns einen einfachen API-Endpunkt erstellen.
### 1. Erstellen eines API-Controllers
Erstellen Sie eine neue Datei `src/Application/Controllers/Api/UserController.php`:
```php
<?php
namespace App\Application\Controllers\Api;
use App\Framework\Http\Controller;
use App\Framework\Http\Request;
use App\Framework\Http\Response;
class UserController extends Controller
{
public function index(Request $request): Response
{
$users = [
['id' => 1, 'name' => 'Max Mustermann'],
['id' => 2, 'name' => 'Erika Musterfrau'],
];
return $this->json($users);
}
public function show(Request $request, int $id): Response
{
$users = [
1 => ['id' => 1, 'name' => 'Max Mustermann'],
2 => ['id' => 2, 'name' => 'Erika Musterfrau'],
];
if (!isset($users[$id])) {
return $this->json(['error' => 'Benutzer nicht gefunden'], 404);
}
return $this->json($users[$id]);
}
}
```
### 2. Definieren von API-Routen
Fügen Sie in der Datei `config/routes.php` die folgenden Routen hinzu:
```php
$router->group('/api', function (Router $router) {
$router->get('/users', [UserController::class, 'index']);
$router->get('/users/{id}', [UserController::class, 'show']);
});
```
Vergessen Sie nicht, den Controller zu importieren:
```php
use App\Application\Controllers\Api\UserController;
```
### 3. Testen der API
Starten Sie den Entwicklungsserver und testen Sie die API mit einem HTTP-Client wie curl:
```bash
curl http://localhost:8000/api/users
curl http://localhost:8000/api/users/1
```
## Arbeiten mit der Datenbank
Das Framework bietet eine einfache Datenbankabstraktion. Hier ist ein Beispiel für die Arbeit mit der Datenbank:
### 1. Erstellen eines Modells
Erstellen Sie eine neue Datei `src/Application/Models/User.php`:
```php
<?php
namespace App\Application\Models;
use App\Framework\Database\Model;
class User extends Model
{
protected string $table = 'users';
protected array $fillable = ['name', 'email', 'password'];
protected array $hidden = ['password'];
}
```
### 2. Erstellen einer Migration
Erstellen Sie eine neue Migration mit dem Konsolenbefehl:
```bash
php console.php db:migration:create create_users_table
```
Dies erstellt eine neue Datei in `migrations/`. Bearbeiten Sie die Datei:
```php
<?php
use App\Framework\Database\Migration;
use App\Framework\Database\Schema\Blueprint;
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->timestamps();
});
}
public function down(): void
{
$this->schema->dropIfExists('users');
}
}
```
### 3. Ausführen der Migration
Führen Sie die Migration aus:
```bash
php console.php db:migrate
```
### 4. Verwenden des Modells im Controller
Aktualisieren Sie den `UserController`:
```php
<?php
namespace App\Application\Controllers\Api;
use App\Application\Models\User;
use App\Framework\Http\Controller;
use App\Framework\Http\Request;
use App\Framework\Http\Response;
class UserController extends Controller
{
public function index(Request $request): Response
{
$users = User::all();
return $this->json($users);
}
public function show(Request $request, int $id): Response
{
$user = User::find($id);
if (!$user) {
return $this->json(['error' => 'Benutzer nicht gefunden'], 404);
}
return $this->json($user);
}
public function store(Request $request): Response
{
$this->validate($request, [
'name' => 'required|string|max:255',
'email' => 'required|email|unique:users,email',
'password' => 'required|string|min:8',
]);
$user = User::create([
'name' => $request->input('name'),
'email' => $request->input('email'),
'password' => password_hash($request->input('password'), PASSWORD_DEFAULT),
]);
return $this->json($user, 201);
}
}
```
Fügen Sie eine neue Route hinzu:
```php
$router->post('/api/users', [UserController::class, 'store']);
```
## Nächste Schritte
Nachdem Sie die Grundlagen des Frameworks kennengelernt haben, können Sie sich mit den folgenden Themen befassen:
- [Routing](../guides/routing.md) - Erfahren Sie mehr über das Routing-System
- [Controller](../guides/controllers.md) - Lernen Sie, wie Sie Controller effektiv einsetzen
- [Validierung](../guides/validation.md) - Validieren Sie Benutzereingaben
- [Datenbank](../guides/database.md) - Arbeiten Sie mit der Datenbank
- [Authentifizierung](../guides/authentication.md) - Implementieren Sie Benutzerauthentifizierung
- [Sicherheit](../guides/security.md) - Schützen Sie Ihre Anwendung
Oder erkunden Sie die [Komponenten](../components/README.md) des Frameworks, um mehr über die verfügbaren Funktionen zu erfahren.