Laravel

PHP elegantes Full-Stack-Framework - Eloquent ORM, Blade-Templates, Artisan CLI, alles inklusive fuer Web-Handwerker

TL;DR

Einzeiler: Laravel ist PHPs elegantes Full-Stack-Framework - Eloquent ORM, Blade-Templates und Artisan CLI machen Webentwicklung angenehm.

Kernstärken:

  • Eloquent ORM - wunderschöne Active Record-Implementierung
  • Blade-Templates - mächtiges Templating mit sauberer Syntax
  • Artisan CLI - Codegenerierung und Aufgabenautomatisierung
  • Alles inklusive - Auth, Queues, Caching, Testing integriert

Core Concepts

Concept 1: Eloquent ORM

Active Record-Pattern - jedes Model entspricht einer Datenbanktabelle:

// Model definieren
class User extends Model
{
    protected $fillable = ['name', 'email'];

    public function posts()
    {
        return $this->hasMany(Post::class);
    }
}

// Abfragen sind ausdrucksstark
$users = User::where('active', true)
             ->orderBy('name')
             ->get();

$user = User::find(1);
$user->posts;  // Lazy-Load-Beziehung

Concept 2: Routes → Controllers

Sauberes Routing zu Controller-Methoden:

// routes/web.php
Route::get('/users', [UserController::class, 'index']);
Route::post('/users', [UserController::class, 'store']);
Route::get('/users/{user}', [UserController::class, 'show']);

// Resource-Routen für CRUD
Route::resource('posts', PostController::class);

// Controller
class UserController extends Controller
{
    public function index()
    {
        return User::all();
    }

    public function show(User $user)  // Route-Model-Binding
    {
        return $user;
    }
}

Concept 3: Blade Templates

Sauberes Templating mit Vererbung und Komponenten:

<!-- layouts/app.blade.php -->
<html>
<body>
    @yield('content')
</body>
</html>

<!-- users/index.blade.php -->
@extends('layouts.app')

@section('content')
    @foreach($users as $user)
        <p>{{ $user->name }}</p>
    @endforeach
@endsection

Quick Start

Create Project

composer create-project laravel/laravel myapp
cd myapp

Create a Route and Controller

php artisan make:controller HelloController
// app/Http/Controllers/HelloController.php
class HelloController extends Controller
{
    public function index()
    {
        return response()->json(['message' => 'Hello Laravel!']);
    }
}

// routes/web.php
Route::get('/', [HelloController::class, 'index']);

Run

php artisan serve
# Öffnen Sie http://localhost:8000

Gotchas

Mass assignment protection

// ❌ MassAssignmentException
User::create($request->all());

// ✅ Füllbare Felder definieren
class User extends Model
{
    protected $fillable = ['name', 'email'];
}

// Oder guarded für das Gegenteil verwenden
protected $guarded = ['id'];  // Alles außer id erlauben

Validation in controllers

public function store(Request $request)
{
    // Validieren - wirft ValidationException bei Fehler
    $validated = $request->validate([
        'name' => 'required|max:255',
        'email' => 'required|email|unique:users',
        'password' => 'required|min:8|confirmed',
    ]);

    return User::create($validated);
}

Environment configuration

# .env-Datei - niemals committen!
APP_ENV=local
APP_DEBUG=true
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_DATABASE=laravel

# Zugriff im Code
config('app.env');
env('DB_HOST');

Artisan generators

php artisan make:model Post -mcr
# Erstellt: Model, Migration, Controller (resource)

php artisan make:migration create_posts_table
php artisan migrate
php artisan migrate:rollback

When to Use

Ideal für:

  • Full-Stack-Webanwendungen
  • APIs mit komplexer Geschäftslogik
  • Teams, die schnelle Entwicklung wünschen
  • Projekte, die Auth, Queues etc. benötigen

Nicht ideal für:

  • Microservices (zu schwer)
  • Hochleistungs-APIs (verwenden Sie Go/Rust)
  • Einfache Skripte

Vergleich:

FeatureLaravelSymfonyCodeIgniter
UmfangFull-StackFull-StackLeichtgewichtig
ORMEloquentDoctrineCustom
LernenEinfachMittelEinfach
MeinungsstarkJaWenigerWeniger

Next Steps

Cheatsheet

MusterCode
Projekt erstellencomposer create-project laravel/laravel app
Dev-Serverphp artisan serve
Controller erstellenphp artisan make:controller Name
Model erstellenphp artisan make:model Name -m
Migrations ausführenphp artisan migrate
Tinkerphp artisan tinker
Routenlistephp artisan route:list
Cache leerenphp artisan cache:clear