Laravel Beispiel-App: Blog Schritt für Schritt

Peter Homburg
Letzte Artikel von Peter Homburg (Alle anzeigen)

Praktisches Tutorial für eine Blog-App mit Laravel. Von der Controller-Erstellung bis zur Blade-View – inkl. Tipps zu Fehlerbehebung, Best Practices, Beispieldaten und weiterführenden Links.


Übersicht & Ziel

Dieses Tutorial zeigt, wie eine einfache Blog-App in Laravel entsteht. Es werden Controller, Routing und Views anhand eines kompakten End-to-End-Beispiels erläutert.

Voraussetzungen

  • Laravel (ab Version 8.x)
  • Composer und Artisan CLI
  • Lokale Entwicklungsumgebung (Homestead, Valet, Laragon oder XAMPP)

Schritt 1: Controller erzeugen

Im Projektstamm folgenden Befehl ausführen:

php artisan make:controller IndexController

Das erzeugt die Datei:

app/Http/Controllers/IndexController.php

Beispiel-Code für den Controller:

<?php
namespace App\Http\Controllers;

use Illuminate\Http\Request;

class IndexController extends Controller
{
public function index()
{
// Beispiel: Leeres Array für Posts (später Model einbinden)
$posts = []; // oder: Post::all()
return view('index', compact('posts'));
}
}


Hinweis:
Mit compact('posts') übergibst du die Variable an die View. Statt eines leeren Arrays kannst du später Eloquent nutzen.

Schritt 2: Route definieren

Öffne:

routes/web.php

Füge hinzu:

use App\Http\Controllers\IndexController;

Route::get('/', [IndexController::class, 'index'])->name('home');
  • Mit Route::get(…) legst du eine Route für die Startseite an.
  • Über den zweiten Parameter [Controller::class, 'action'] wird der Controller samt Methode übergeben.
  • ->name('home') gibt der Route einen Namen – nützlich fürs Routing und Verlinken in Templates.

Erläuterung ::class:
IndexController::class löst den vollqualifizierten Namen der Klasse auf und ist sicherer als einfache Strings – gerade bei Refactorings.

Schritt 3: View (Blade) anlegen

Laravel nutzt standardmäßig Blade als Template-Engine.

Lege folgende Datei an:

resources/views/index.blade.php

Beispiel-View:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Blog — Start</title>
</head>
<body>
<h1>Willkommen im Blog</h1>
@if(count($posts))
<ul>
@foreach($posts as $post)
<li>{{ $post->title }}</li>
@endforeach
</ul>
@else
<p>Keine Beiträge vorhanden.</p>
@endif
</body>
</html>
  • Mit @if@foreach usw. kannst du einfach Schleifen und Bedingungen darstellen.
  • Daten werden direkt aus dem Controller an die View übergeben.

Schritt 4: (Optional) Model und Migration

Für echte Blogs brauchst du eine Datenbank und ein Model. Erzeuge beides per Artisan:

php artisan make:model Post -m
  • Das legt die Datei app/Models/Post.php und Migration unter database/migrations/ an.

Migration anpassen:

public function up()
{
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->text('body');
$table->timestamps();
});
}

Migration anwenden:

php artisan migrate

Schritt 5: (Optional) Beispieldaten mit Seeder

Um den Blog zu testen:

php artisan make:seeder PostSeeder

Im Seeder z. B.:

public function run()
{
\App\Models\Post::factory()->count(3)->create();
}

Führe den Seeder aus:

php artisan db:seed --class=PostSeeder

So sieht es im Browser aus

Stelle sicher, dass die Startseite (/) geladen wird.
Die Überschrift Willkommen im Blog erscheint. Falls Daten hinterlegt sind, werden sie als Liste angezeigt; sonst folgt die Meldung Keine Beiträge vorhanden.

Troubleshooting & FAQ

  • 500 Error:
    Prüfe, ob der Namespace des Controllers stimmt und Composer Autoload neu geladen wurde (composer dump-autoload).
  • Blade-Fehler:
    View-Dateiname stimmt nicht oder liegt am falschen Ort (z. B. resources/views/index.blade.php).
  • Artisan-Fehler:
    Starte mitbashphp artisan route:list php artisan config:clear php artisan view:clear
  • Leere Liste:
    Noch keine Einträge in der Datenbank? Erzeuge Testdaten via Seeder oder im Tinker (php artisan tinker).