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

8.6 KiB

Erste Schritte

Diese Anleitung führt Sie durch die ersten Schritte mit dem Framework, nachdem Sie es installiert und konfiguriert 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

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:

<!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

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:

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

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:

$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:

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:

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

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:

php console.php db:migration:create create_users_table

Dies erstellt eine neue Datei in migrations/. Bearbeiten Sie die Datei:

<?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:

php console.php db:migrate

4. Verwenden des Modells im Controller

Aktualisieren Sie den UserController:

<?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:

$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:

Oder erkunden Sie die Komponenten des Frameworks, um mehr über die verfügbaren Funktionen zu erfahren.