Laravel - Grundlagen - Beispiel - √úbersicht


Laravel bietet fertige Module f√ľr alle g√§ngigen Anforderungen, entsprechend k√∂nnen sich Entwickler schneller auf das Wesentliche st√ľrzen: auf die Entwicklung der eigentlichen Applikation. Laravel ist sehr gut dokumentiert und bietet unter anderem auch Video-Tutorials f√ľr Beginner und Fortgeschrittene:¬†https://laracasts.com/. Zudem¬†wird z.B. auch die Integration von Bootstrap als CSS Framework und Vue.js als Javascript-Frontent-Framework vorbereitet und beschrieben. Der Hauptvorteil eines Frameworks wie Laravel sind, neben den fertigen Modulen, auch die Designvorgaben f√ľr den Aufbau der Webanwendung. Die aktuelle Laravel Version ist 9.41.0.

Voraussetzungen

Kurz zusammengefasst, ben√∂tigt eine Entwicklungsumgebung neben einem Webserver mit PHP und z.B. MySQL als Datenbank,¬†den Paketmanager composer f√ľr PHP-Pakete und f√ľr die Javascript-Sourcen den Paketmanager npm. F√ľr das Setup wird ein Zugriff auf die Konsole des Webservers vorausgesetzt (meist SSH),¬†die genauen Systemvoraussetzungen stehen auf der Herstellerseite:¬†https://laravel.com/docs/master/installation.

Eine Entwicklungsumgebung kann auch unter Windows installiert werden: "Laragon" oder "Laravel Homestead", siehe: www.libe.net/laravel-homestead-windows-10. 

Installation

Wer alle Voraussetzungen f√ľr Laravel installiert hat, kann Laravel mittels composer installieren:¬†

composer create-project --prefer-dist laravel/laravel blog

Composer lädt alle Abhängigkeiten und installiert laut dem Beispielbefehl Laravel im Unterordner "blog".

Frontend

F√ľr einen schnelleren Start gibt es vorbereitete Templates f√ľr die User-Anmeldung, dabei kann zwischen Jetstream und der klassischen Laravel-UI und Breeze gew√§hlt werden.

F√ľr Jetstream kann zwischen Livewire und Inertia gew√§hlt werden. Livewire ist ein auf Blade-Templates basiertes Frontend, Inertia hingegen besteht aus Vue-Components und wird somit rein in JavaScript umgesetzt. Nach dem Wechseln in den Unterordner:¬†cd blog, kann ein vorbereitetes Frontend installiert werden.

Einen √úberblick √ľber die m√∂glichen Varianten bietet unser n√§chster Artikel: Laravel/UI vs Vue vs Jetstream: Inertia vs Livewire [Frontend]¬†

Frontend-Jetstream ab Version 8.0

Jetstream bietet neben der Useranmeldung auch die Möglichkeit einer 2-Faktor-Authentifizierung, eines Passwort-Reset-Dialog und optional das Erstellen und Verwaltung von Teams:

composer require laravel/jetstream

Bei der Wahl der Frontend-Komponenten kann zwischen Inertia und Livewire gewählt werden:

php artisan jetstream:install livewire --teams

Der Parameter --teams ist optional und f√ľgt eine Team-Verwaltung hinzu ...

Alternativ Jetstream und Inertia: 

php artisan jetstream:install inertia --teams

siehe auch: jetstream.laravel.com/

klassische UI ohne Jetstream: Bootstrap Laravel-UI oder Breeze:

Eine einfachere Alternative zu Jetstream bietet die Bootstrap UI:

composer require laravel/ui
php artisan ui bootstrap

oder alternativ, basierend auf Tailwind-CSS: Breeze:

composer require laravel/breeze
php artisan breeze:install

Das folgende Tutorial, bzw. das Authentication-Beispiel verwendet laravel/ui.

Javascript-Sourcen installieren und zusammenf√ľgen

Die Installation der NPM-Pakete erfolgt mittels: 

npm install und

npm run dev¬†f√ľgt die Javascript-Sourcen zusammen, siehe:¬† NPM Pakete - Laravel app.js und css¬†

Die Datenbank kann wie folgt angelegt werden: Laravel Datenbank. 

Model-View-Controller Design

Damit der Start in Laravel möglichst schnell klappt, habe ich die gängigen Aktionen: index, create, store, edit, update, show, destroy in einem Beispiel zusammengefasst. Das Beispiel kann Einträge erstellen, auflisten, anzeigen, bearbeiten und löschen.

Vorab aber etwas Theorie zur Funktionsweise von Laravel. Laravel folgt dem traditionellen Model-View-Controller Design:

Controller: Verarbeiten die Usereingaben und empfangenen Daten mittels Verwendung von Models

Model: Lesen oder schreiben der Werte von und zur Datenbank, Hinterlegen von bestimmten zusätzlichen Eigenschaften zum Model und Beziehungen zu anderen Models

Views¬†Werden f√ľr die Anzeige der jeweiligen Seite verwendet

Um die URLs den bestimmten Controller-Aktionen zuzuweisen, startet der Aufruf √ľber Routes.

F√ľr eine bessere Vorstellung habe ich das¬†konkrete Beispiel-Skript schematisch dargestellt.

Als¬†Platzhalter f√ľr den Model-Namen habe ich "Myinput" verwendet. Der¬†verwendete Name "Myinput" sollte als Datenbankeintrag oder ein Objekt verstanden werden. Das Model wird f√ľr das Ansprechen der Datenbank verwendet, der Model-Name repr√§sentiert die zu verwaltenden Objekte. F√ľr das Erstellen einer Anwendung, um z.B. Autos zu verwalten, k√∂nnte anstelle von "Myinput" als Model der Name "Auto" verwendet werden, zum Verwalten von B√ľchern, z.B. "Buch".

Laravel verwendet an bestimmten Stellen ein "s" am Ende des Namens. Das "s"¬†steht f√ľr die Mehrzahl:¬†Wenn wir Laravel nicht explizit etwas anderes mitteilen, geht das Framework¬†davon aus, dass die Datenbanktabelle f√ľr "Myinput", "myinputs" hei√üt. (F√ľr den Model-Namen k√∂nnen auch zusammengesetzte W√∂rter verwendet werden, z.B."MyInput" (gro√ües I) w√ľrde die Tabelle my_inputs hei√üen)

Wird im Browser eine URL mit dem Model-Namen (/myinputs) aufgerufen, landet die Anfrage in der Datei publicroot\app\Http\routes.php. Die Routes-Datei k√∂nnte die Anfrage direkt verarbeiten, √ľbersichtlicher wird es allerdings, wenn die Anfragen an einen Controller weitergegeben werden:¬†

Folgender Eintrag in der Datei routes.php erstellt automatisch URL-Pfade f√ľr einen zugeh√∂rigen Controller:

Route::resource('myinputs', 'MyinputController');

Der Befehl Route::resource erzeugt automatisch die folgenden Pfade:

Request Type Pfad Aktion Route Name
GET /myinputs index myinputs.index
GET /myinputs/create create myinputs.create
POST /myinputs store myinputs.store
GET /myinputs/{id} show myinputs.show
GET /myinputs/{id}/edit edit myinputs.edit
PUT/PATCH /myinputs/{id} update myinputs.update
DELETE /myinputs/{id} destroy myinputs.destroy

Route::resource steht automatisch f√ľr mehrere "Route::REQUEST"-Eintr√§ge,¬†diese k√∂nnten auch einzeln eingetragen werden:¬†¬†

Route::get($uri, $callback);
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);

Beim Aufruf der URL: http://MyWebserver.com/myinputs, wird die entsprechende Funktion index in der Controllerdatei "MyModelController" aufgerufen. http://MyWebserver.com/myinputs/create wird an die Funktion create in der Controllerdatei "MyModelController" geleitet, usw.

Best Practices siehe https://github.com/alexeymezenin/laravel-best-practices/blob/master/README.md

positive Bewertung({{pro_count}})
Beitrag bewerten:
{{percentage}} % positiv
negative Bewertung({{con_count}})

DANKE f√ľr deine Bewertung!


Fragen / Kommentare