DE EN

Laravel Tutorial

Laravel Tutorial Laravel Guestbook

Laravel Tutorial

Nachdem meine kleine Bloggingsoftware ja nun bei Github veröffentlicht wurde, habe ich beschlossen, den ganzen Schmonz auf ein neues Niveau zu heben und hier eine Blogsoftware/CMS auf Basis eines etablierten Frameworks wie Zend Framework, Symfony oder Laravel aufzuziehen. Und genau das passiert gerade: Ich schreibe die ganze Geschichte nun auf Laravel um. Zum Einen natürlich, um Laravel zu lernen und zum anderen, um in meinem Job einfach noch besser zu werden. Die Fortschritte führe ich in meiner kleinen Laravel-Reihe auf. Wie funktioniert Laravel?

Laravel installieren

Ich möchte also ein Projekt aufsetzen. Das Programm soll alles können, wass TFF3 jetzt auch schon kann. Zuerst einmal muss man sich Laravel installieren. Am einfachsten geht dies über composer. Da heute ohne vernünftige Paketmanager überhaupt nichts mehr sinnvoll ist, gehe ich auf die Installation und darauf, was composer ist, gar nicht mehr ein.

$ composer global require "laravel/installer"

Laravel steht dir nun zur Verfügung. Ich möchte nun eine einfache Bloggingsoftware und ein CMS schreiben. Das ganze nenne ich einfach mal TFCMS. Um Laravel zu sagen, dass ich genau so etwas machen möchte, muss ich ein Projekt erstellen.

$ laravel new TFCMS

Laravel erstellt nun im aktuellen Verzeichnis ein Unterverzeichnis namens TFCMS und pappt dort jede Menge Unterverzeichnisse rein. Wofür die alle gut sind, weiß ich zum jetzigen Zeitpunkt noch nicht. Ich persönlich finde eh immer gruselig, was in Frameworks so verbastelt wird. Aber gut: Irgend eine Logik wird da schon hinter stehen und am Ende dieser Reihe wissen wir vermutlich alle, was der ganze Aufriss soll... Aktuell muss ich selbst zugeben: Was soll der Scheiß?

Die Startseite deines Projektes wird nun angezeigt, wenn du über die Kommandozeile gehst und den Webserver startest:php artisan serve

Hallo Welt

Laravel arbeitet strikt nach dem sogenannten MVC-Entwurfsmuster. Es gibt also ein Model (da liegen deine Daten drin), einen Controller (der verarbeitet deine Daten, sowohl die reingehenden, als auch die rausgehenden) und einen View (Das, was du letztendlich siehst). Ein einfaches Hallo Welt besteht also aus einem Model (Inhalt: Hallo Welt), einem Controller (Wenn aufgerufen, hole Hallo Welt) und dem View (Zeig mir Hallo Welt.) Und ja - das ist erst mal ziemlich dämlich und wahnsinnig kompliziert. In PHP schreibt man normalerweise nämlich einfach:

<?php echo 'Hallo Welt!'

Wir sind aber ja auf der Suche nach hochwertigem Code. Unser Hallo Welt soll so viel mehr können, als andere Hallo-Welt-Programme. Wir wollen das Hallo Welt so schreiben, dass man das in jeden anderen Code einbauen kann, ohne zu wissen, wie das funktioniert. Da wir uns an das MVC-Muster halten wollen, erstellen wir uns also einen HalloWelt-Controller!

$ php artisan make:controller HalloWelt --resource

Im Ordner app/Http/Controllers/ wird nun eine Datei erstellt. Die Datei beinhaltet alle typischen Aktionen, die ein Programm normalerweise erledigen muss. Man kann Datensätze erstellen, bearbeiten, angucken oder auch löschen. In Nerdsprache nennt sich dieses Grundkonzept Scaffolding und der Aktionspool nennt sich CRUD. Wenn du --resource nicht mit angibst, wird ein leerer Controller ohne diese Aktionen erstellt. Muss man halt selbst wissen, ob man das nutzen möchte. Da ich jetzt schon mit --resource angefangen bin, zeige ich jetzt mal, was in meinem Code so drin steht.

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class HalloWelt extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        //
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //
    }
}

Hier zeigt sich eine der Stärken von Laravel: Ich erhalte mit einem einzigen Kommando alle Möglichkeiten zur Datenmanipulation. Mehr Aktionen gibt es bei keinem einzigen Programm. Ich muss immer nur erstellen, bearbeiten, anzeigen oder eben löschen.

Routen früher

Ob nun Symfony, Zend Framework oder eben auch Laravel: Alle haben etwas gemeinsam, das sich Routing nennt. Routings bestimmen, welcher URL-Aufruf welche Aktionen auslösen soll. Das klingt ziemlich kompliziert, aber es ist ziemlich simpel. Nehmen wir noch einmal das einfachste PHP-Beispiel. Ganz früher haben wir alle so programmiert: (NICHT NACHMACHEN!!!)

<?php
// Aufrufe umleiten
// index.php?action=login
include'header.php';
include($_GET['action'].'.php');
include'footer.php';

So gruselig dieser Code auch ist, das hier ist einfaches Routing. Je nachdem, was ich in der URL an action übergebe, wird ein anderes PHP-Skript inkludiert und zwischen meinem Seitenkopf header.php und meinem Seitenfuss footer.php geladen. Guckt mich nicht so böse an, das haben wir früher alle so gemacht.

Routen bei Laravel

Ähnlich wie die fiesen Includes in meinem Horror-Beispiel werden Routen in Laravel über einen Routencontroller festgelegt. Die Datei zur Steuerung der Routen befindet sich in der Datei routes/web.php. Dort legen wir fest, was eigentlich passieren soll, wenn eine bestimmte URL aufgerufen wird. Angenommen, unser Hallo Welt soll immer dann kommen, wenn man www.meinedomain.de/moin aufruf, so wäre die korrekte Route:


           Route::get('/moin', 'HalloWelt@index');
       

Man sagt Laravel nun also: Wenn "Moin" kommt, dann öffne den Controller HalloWelt und führe die Methode index aus. Klingt noch immer kompliziert? Im Grunde ist das dasselbe, wie man früher über die Includes gemacht hat. Allerdings gibt's hier einen entscheidenden Vorteil: Was nicht in der Route existiert, kann man nicht aufrufen. Wenn Du irgendwann dein HalloWelt gegen ein HalloDu austauschst, ändert sich die URL nicht, weil du einfach nur eine neue Route definierst. Die Route steuert auch, welcher View geladen wird.

View - Oder die Kunst, das auch mal schön zu haben

Laravel wird mit einer Template-Engine namens Blade ausgeliefert. Templates sind Vorlagendateien, die das Layout einer Seite beinhalten. Im Idealfall enthalten diese Templates gar keinen PHP-Codes, denn hier werden normalerweise lediglich die Ausgaben hübsch formatiert und dann einfach nur ausgegeben. Über den Sinn und Unsinn von Template-Engines kann und soll man sich streiten. Fakt ist aber, dass man dank klarer Trennung von Code/Design zumindest keine Angst vor Relaunches haben muss, da die Logik von der Optik komplett getrennt wurde. Der Name des Controllers ist in der Regel auch der Name des Views, das erleichtert die Übersicht. Blade hat eine eigene, leicht zu erlernende Syntax, auf die ich nun aber nicht weiter eingehen werde. Ich will einfach nur Hallo Name in einer Seite darstellen. Mein Quellcode für HelloWelt.blade.php sieht also so aus:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    Hallo {{$name}}
</body>
</html>

Du siehst hier eine HTML-Seite und der Name ist in einem Platzhalter {{}} hinterlegt worden. Jetzt müssen wir unserem Controller noch beibringen, diesen Platzhalter zu nutzen UND auch Hallo Name zu schreiben. Dafür öffnen wir noch einmal den Quellcode des HalloWelt-Controllers und überarbeiten die show-Methode.


public function show($name)
{
    return view('hello',array('name' => $name));
}

Was passiert hier? Wir sagen dem Controller, dass er den View "hello" Dateiname:hello.blade.php laden soll und in diesem sämtliche Vorkommnisse der Variable "name" durch unseren Namen austauschen soll. Allerdings haben wir noch keine Route definiert, das tun wir jetzt:

Route::get('/moin/{name}', 'HalloWelt@show');

Wie wir oben ja schon festgestellt haben, steuert die Route nun dass bei /moin/ die Datei HalloWelt geladen wird. Das @show bedeutet, dass wir einen bestimmten Datensatz auslesen möchten und mit {name} steuern wir, was wir an show übergeben möchten. Wenn wir nun also http://www.meinedomain.de/moin/Marcel aufrufen, wird der View geladen und die Variable {$name} durch Marcel ausgetauscht.

Dieses Tutorial wird zeitnah fortgesetzt. Beachte die Kategorie Laravel in meinem Blog!


Filed in: laravel,
PDF
Like 4finden das gut
Leider hat hier noch keiner seinen Senf zum Thema abgegeben. Sei du doch der erste. Oder die erste. Oder das letzte.

Teile diesen Artikel, wenn er dir gefallen hat

Facebook Twitter Google+ LinkedIn
powered through tff3