Inhaltsverzeichnis
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:
Laravel und 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:
Laravel und Git
Änderungen an Models, Migrationen und anderem Anwendungscode werden mit Git versioniert.
Insbesondere Migrationen gehören zur Versionshistorie des Projekts.
Weitere Informationen:
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.
