Benutzer-Werkzeuge

Webseiten-Werkzeuge


werkzeuge:laravel:start

Laravel


Laravel ist ein PHP-Framework zur Entwicklung moderner Webanwendungen.

Es stellt unter anderem Werkzeuge für Routing, Datenbankzugriffe, Migrationen, Models, Authentifizierung, Validierung und Kommandozeilenbefehle bereit.

In meinen Projekten wird Laravel unter anderem für die Entwicklung von RoWaBase eingesetzt.

Projektstruktur

Ein Laravel-Projekt besteht aus verschiedenen Verzeichnissen mit klar getrennten Aufgaben.

Wichtige Bereiche sind:

app/
bootstrap/
config/
database/
public/
resources/
routes/
storage/
tests/

app/

Enthält den eigentlichen Anwendungscode.

Beispiele:

app/Models/
app/Http/
app/Providers/

Eigene Strukturen können bei Bedarf ergänzt werden.

Bei RoWaBase beispielsweise:

app/Contracts/
app/Enums/

config/

Enthält die Konfigurationsdateien der Anwendung.

database/

Enthält unter anderem Migrationen, Factories und Seeder.

routes/

Enthält die Definition der Anwendungsrouten.

resources/

Enthält unter anderem Views, CSS und JavaScript.

public/

Ist der öffentlich erreichbare Bereich der Anwendung.


Artisan

Artisan ist das Kommandozeilenwerkzeug von Laravel.

Befehle werden im Stammverzeichnis eines Laravel-Projekts ausgeführt:

php artisan

Eine Übersicht der verfügbaren Befehle:

php artisan list

Konfiguration mit .env

Lokale Einstellungen werden hauptsächlich in der Datei .env gespeichert.

Beispiel:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=rowabase
DB_USERNAME=rowabase_app
DB_PASSWORD=...

Die .env kann sensible Daten wie Passwörter und Schlüssel enthalten.

Sie darf deshalb nicht in Git gespeichert werden.

Laravel-Projekte verwenden zusätzlich:

.env.example

Diese Datei dokumentiert die benötigten Einstellungen, enthält aber keine echten Zugangsdaten.


Konfigurationscache

Nach Änderungen an Konfiguration oder .env kann der Laravel-Konfigurationscache geleert werden:

php artisan config:clear

Weitere Laravel-Caches können mit folgendem Befehl bereinigt werden:

php artisan optimize:clear

Datenbankverbindungen

Datenbankverbindungen werden unter anderem in folgender Datei definiert:

config/database.php

Die Standardverbindung wird normalerweise über .env bestimmt.

Bei RoWaBase werden unterschiedliche Datenbankbenutzer für unterschiedliche Aufgaben verwendet.

Beispiel:

mysql
→ normaler Anwendungszugriff

mysql_migration
→ Änderungen an der Datenbankstruktur

Dadurch benötigt der eigentliche Anwendungsbenutzer keine unnötigen Rechte wie CREATE, DROP oder ALTER.


Migrationen

Migrationen beschreiben Änderungen an der Datenbankstruktur als PHP-Code.

Sie befinden sich unter:

database/migrations/

Eine neue Migration erzeugen:

php artisan make:migration create_beispiel_table

Für eine Änderung an einer vorhandenen Tabelle:

php artisan make:migration update_beispiel_table --table=beispiel

Migration zunächst simulieren

Vor einer tatsächlichen Änderung kann die erzeugte SQL-Anweisung angezeigt werden:

php artisan migrate --pretend

Bei RoWaBase wird dafür ausdrücklich die Migrationsverbindung verwendet:

php artisan migrate --database=mysql_migration --pretend

Die Datenbank wird dabei noch nicht verändert.

Dies ist ein sinnvoller Kontrollschritt vor einer Migration.


Migration ausführen

Standard:

php artisan migrate

Bei RoWaBase:

php artisan migrate --database=mysql_migration

Damit werden noch nicht ausgeführte Migrationen angewendet.


Migrationsstatus anzeigen

php artisan migrate:status

Bei einer eigenen Datenbankverbindung:

php artisan migrate:status --database=mysql_migration

Die Ausgabe zeigt, welche Migrationen bereits ausgeführt wurden.


Migration rückgängig machen

Die zuletzt ausgeführte Migrationsgruppe kann zurückgenommen werden:

php artisan migrate:rollback

Bei RoWaBase entsprechend:

php artisan migrate:rollback --database=mysql_migration

Rollback-Befehle sollten bewusst eingesetzt werden, insbesondere wenn bereits produktive Daten vorhanden sind.


Models

Laravel verwendet Eloquent als ORM für den Datenbankzugriff.

Ein Model kann mit Artisan erzeugt werden:

php artisan make:model Objekt

Die Datei wird beispielsweise angelegt unter:

app/Models/Objekt.php

Ein Model repräsentiert typischerweise Datensätze einer Datenbanktabelle.


Tabellennamen

Laravel versucht den Tabellennamen automatisch aus dem Namen des Models abzuleiten.

Bei deutschen Bezeichnungen funktioniert diese automatische Pluralbildung nicht immer wie gewünscht.

Beispiel:

class Objekt extends Model

Laravel erwartete automatisch:

objekts

Die tatsächliche Tabelle heißt jedoch:

objekte

Deshalb wird der Tabellenname im Model ausdrücklich festgelegt:

protected $table = 'objekte';

Dasselbe Prinzip wird beispielsweise bei Geschaeftspartner verwendet.


Fillable

Mit Fillable wird festgelegt, welche Attribute über Mass Assignment gesetzt werden dürfen.

Beispiel:

#[Fillable([
    'bezeichnung',
    'status',
    'notizen',
])]

Dies wird beispielsweise verwendet bei:

$objekt = new Objekt([
    'bezeichnung' => 'Testobjekt',
    'status' => ObjektStatus::ANGEBOT,
]);

Casts

Eloquent kann Datenbankwerte automatisch in PHP-Datentypen umwandeln.

Beispiel für Boolean:

protected function casts(): array
{
    return [
        'is_active' => 'boolean',
    ];
}

Auch PHP-Enums können verwendet werden:

protected function casts(): array
{
    return [
        'status' => ObjektStatus::class,
    ];
}

Damit wird beispielsweise der Datenbankwert:

angebot

in der Anwendung automatisch als entsprechender Enum-Wert behandelt.


Tinker

Laravel Tinker ermöglicht das interaktive Testen der Anwendung über die Kommandozeile.

Start:

php artisan tinker

Beispiel:

$objekt = new App\Models\Objekt([
    'bezeichnung' => 'Testobjekt',
    'status' => App\Enums\ObjektStatus::ANGEBOT,
]);

Speichern:

$objekt->save();

Löschen:

$objekt->delete();

Tinker eignet sich sehr gut, um Models, Casts, Beziehungen und Datenbankzugriffe während der Entwicklung gezielt zu testen.

Beenden:

exit

PHP-Syntax vor dem Test prüfen

Nach Änderungen an einer PHP-Datei sollte zunächst die PHP-Syntax kontrolliert werden.

Beispiel:

php -l app\Models\Objekt.php

Erwartete Ausgabe:

No syntax errors detected in app\Models\Objekt.php

Erst danach sollte der betreffende Laravel-Code ausgeführt oder mit Tinker getestet werden.


Praxis: RoWaBase

Bei RoWaBase hat sich für neue Datenbankbausteine bisher folgender Arbeitsablauf bewährt:

1. Fachliches Modell festlegen
2. Interface / Enum definieren
3. Migration erzeugen
4. Migration bearbeiten
5. PHP-Syntax prüfen
6. Migration mit --pretend kontrollieren
7. Migration ausführen
8. Eloquent-Model erstellen
9. PHP-Syntax prüfen
10. Model mit Tinker testen
11. Testdatensatz wieder entfernen
12. Änderungen mit Git sichern

Dadurch werden Datenbankstruktur und Anwendungscode schrittweise aufgebaut und jeder wichtige Zwischenstand kann kontrolliert werden.


Laravel und PHP

Laravel basiert auf PHP.

Informationen zur PHP-Installation, php.ini, Extensions und Syntaxprüfung befinden sich unter:

PHP


Laravel und Composer

Laravel und seine PHP-Abhängigkeiten werden mit Composer verwaltet.

Weitere Informationen:

Composer


Laravel und MariaDB

RoWaBase verwendet MariaDB als Datenbanksystem.

Die Datenbankstruktur wird dabei nicht manuell gepflegt, sondern über Laravel-Migrationen nachvollziehbar verändert.

Weitere Informationen:

MariaDB


Laravel und Git

Änderungen an Models, Migrationen und anderem Anwendungscode werden mit Git versioniert.

Insbesondere Migrationen gehören zur Versionshistorie des Projekts.

Weitere Informationen:

Git


Nützliche Artisan-Befehle

php artisan list
php artisan make:model Modellname
php artisan make:migration migrationsname
php artisan migrate
php artisan migrate --pretend
php artisan migrate:status
php artisan migrate:rollback
php artisan tinker
php artisan config:clear
php artisan optimize:clear

Merksatz

Laravel übernimmt viel Arbeit – wichtige Entscheidungen bleiben trotzdem Teil der Anwendung.

Datenmodell, Verantwortlichkeiten, Berechtigungen und fachliche Logik sollten bewusst festgelegt werden, bevor Laravel-Code und Migrationen entstehen.

↑

werkzeuge/laravel/start.txt · Zuletzt geändert: (Externe Bearbeitung)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki