Heim >Backend-Entwicklung >PHP-Tutorial >Laravel Best Practices, Tipps und Tricks für 5
Auch wenn wir uns dem Jahr 2025 nähern, ist Laravel weiterhin die erste Wahl für die Webentwicklung und bietet Entwicklern die Tools zum Erstellen leistungsstarker und effizienter Anwendungen. In diesem Artikel werden wichtige Best Practices, Tipps und Tricks beschrieben, mit denen Sie Ihre Codequalität verbessern und Ihren Workflow optimieren können, unabhängig davon, ob Sie Laravel 9, 10 oder 11 verwenden. Diese Erkenntnisse werden Ihnen helfen, das Beste aus Laravel herauszuholen und Ihre Entwicklungskompetenzen zu verbessern , unabhängig davon, ob Sie Anfänger oder erfahrener Entwickler sind.
Die Aktualisierung von Laravel hat mehrere wichtige Vorteile:
Die regelmäßige Ausführung des Composer-Updates ist entscheidend, um Ihre Pakete auf dem neuesten Stand zu halten. Diese einfache Vorgehensweise ist eine der besten Möglichkeiten, um sicherzustellen, dass Ihre Pakete mit den neuesten Funktionen und Sicherheitspatches auf dem neuesten Stand sind.
Wenn Sie bei Aktualisierungen zögern, kann dies darauf hindeuten, dass Ihr Code nicht ausreichend getestet wurde. Durch die Einführung von Testpraktiken können Sie sicherstellen, dass größere Updates Ihren Code nicht beschädigen, sodass Sie die Verbesserungen von Laravel vollständig nutzen können.
Wenn Sie es vorziehen, nicht manuell zu aktualisieren, sollten Sie ServBay in Betracht ziehen, ein Umgebungsverwaltungstool, das bereits Betaversionen von PHP 8.4 integriert hat, was es einfacher macht, Laravel und verschiedene Pakete auf dem neuesten Stand zu halten.
Automatisierte Tests sind ein weitreichender, aber oft unterschätzter Bereich. Es handelt sich jedoch um eine der wichtigsten Best Practices zur Gewährleistung der Projektzuverlässigkeit.
Zu den wichtigsten Vorteilen der Aufrechterhaltung einer robusten Testsuite gehören:
Wenn Sie Code ändern, führen Sie einfach den PHP-Artist-Test aus, um fehlerhafte Funktionen zu identifizieren, die Probleme zu beheben und den Vorgang zu wiederholen!
Automatisierte Tests können die Projektstabilität erheblich verbessern und Ihrer Karriere einen enormen Auftrieb verleihen.
Um Ihnen den Einstieg zu erleichtern, bietet Laracasts kostenlose Testkurse an. Sie können mehr über PHPUnit (den Industriestandard) und Pest (ein modernes Test-Framework, das PHP-Tests vereinfacht) erfahren. Der Kurs „Pest From Scratch“ ist sehr zu empfehlen.
Haben Sie jemals darüber nachgedacht, warum Sie ein Framework wie Laravel verwenden sollten?
Frameworks bieten einen strukturierten Entwicklungsansatz und stellen sicher, dass alle Teammitglieder konsistent bleiben und auf ein gemeinsames Ziel hinarbeiten. Sie verfügen über umfangreiche, komplexe und praxiserprobte Funktionen, die es Ihnen ermöglichen, sich auf die einzigartigen Aspekte Ihres Projekts zu konzentrieren, ohne sich in Details zu verlieren.
Wird es also als Best Practice angesehen, die Standardprojektstruktur von Laravel zu befolgen? Absolut! Hier ist der Grund:
Benutzerdefinierte Formularanfragen in Laravel sind leistungsstarke Tools zur Durchführung der Validierung und bieten mehrere wichtige Vorteile:
Das Erstellen einer benutzerdefinierten Formularanfrage ist einfach. Führen Sie einfach den folgenden Artisan-Befehl aus:
php artisan make:request StorePostRequest
Dann können Sie in Ihrem Controller einfach die Anfrage eingeben:
use App\Http\Requests\StorePostRequest; class PostController { public function store(StorePostRequest $request) { $validated = $request->validated(); Post::create($validated); // Other logic... } }
Benutzerdefinierte Formularanfragen können über die Validierung hinaus auch zusätzliche Logik enthalten. Beispielsweise können Sie Eingabedaten normalisieren, bevor sie den Controller erreichen, indem Sie die Methode „prepareForValidation“ überschreiben:
public function prepareForValidation() { $this->merge([ 'slug' => Str::slug($this->title), ]); }
In diesem Beispiel generiert die Methode automatisch einen Slug aus dem Titel, bevor der Validierungsprozess stattfindet.
Benutzerdefinierte Formularanfragen können auch Autorisierungslogik verarbeiten. Wenn Sie die Verwendung von Richtlinien als umständlich empfinden, können Sie einfache Autorisierungsprüfungen direkt in die Formularanforderung einbinden.
Selbst wenn Best Practices befolgt werden, können Controller unhandlich werden. Eine großartige Lösung ist die Verwendung von Single-Action-Controllern in Laravel. Diese Controller sind für die Verarbeitung einer einzelnen Aktion konzipiert und nicht für mehrere Aktionen wie Standard-Ressourcencontroller.
Um einen Single-Action-Controller zu erstellen, verwenden Sie den folgenden Artisan-Befehl:
php artisan make:request StorePostRequest
Dieser Befehl erstellt einen Controller mit nur einer Aktion namens __invoke. Weitere Informationen zur magischen Methode __invoke finden Sie in der Laravel-Dokumentation.
Mit einem Single-Action-Controller können Sie Routendefinitionen vereinfachen. So verwenden Sie es in Ihren Routen:
use App\Http\Requests\StorePostRequest; class PostController { public function store(StorePostRequest $request) { $validated = $request->validated(); Post::create($validated); // Other logic... } }
Die Verwendung von Single-Action-Controllern ist eine subjektive Best Practice. Es liegt an Ihnen und Ihrem Team, zu bestimmen, ob dieser Ansatz zur Struktur und den Lesbarkeitspräferenzen des Projekts passt.
In Laravel ist Middleware ein leistungsstarkes Tool, mit dem Sie eingehende Anfragen filtern oder ändern können. Durch den Einsatz von Middleware können Sie Codeduplizierungen vermeiden und Controller sauber und verwaltbar halten. Hier sind einige häufige Anwendungsfälle für Middleware:
Laravel bietet verschiedene integrierte Middleware für allgemeine Aufgaben wie Authentifizierung und Ratenbegrenzung.
Um benutzerdefinierte Middleware zu erstellen, verwenden Sie den folgenden Artisan-Befehl:
public function prepareForValidation() { $this->merge([ 'slug' => Str::slug($this->title), ]); }
In Ihrer Middleware können Sie die Logik zur Bearbeitung der Anfrage definieren. Hier ist ein Beispiel für eine Middleware, die prüft, ob ein Benutzer über genügend Token verfügt:
php artisan make:controller ShowPostController --invokable
Sobald Sie Ihre Middleware definiert haben, können Sie sie an eine beliebige Anzahl von Routen anhängen. Dieser modulare Ansatz trägt dazu bei, Ihren Code sauber zu halten und Duplikate in Controllern zu reduzieren.
use App\Http\Controllers\ShowPostController; // Single action controller route Route::get('/posts/{post}', ShowPostController::class);
Die Verwendung von Autorisierungsrichtlinien in Laravel ist entscheidend für die Erstellung klarer und wartbarer Anwendungen. Die drei Hauptvorteile der Verwendung von Richtlinien sind:
Sehen wir uns ein praktisches Szenario für die Verwendung einer Richtlinie für Post-Updates an:
php artisan make:request StorePostRequest
Migrationen sind eine Möglichkeit, das Datenbankschema mithilfe von reinem PHP-Code zu definieren. Sie können sie sich als Code-Alternative zu phpMyAdmin vorstellen und eine programmgesteuerte Möglichkeit zur Verwaltung Ihrer Datenbankstruktur bieten. Dieser Ansatz ist besonders für Teams von Vorteil, da er es jedem ermöglicht, dieselbe Entwicklungsumgebung auf seinen lokalen Computern zu replizieren und einen klaren Änderungsverlauf in Git zu verwalten.
Migrationen erleichtern auch die Bereitstellung von Projekten in neuen Umgebungen (wie Staging oder Produktion), ohne dass die Datenbank aus anderen Umgebungen exportiert werden muss. Eine häufige Gefahr besteht jedoch darin, dass einige Entwickler Änderungen direkt an der Datenbank vornehmen, anstatt neue Migrationen zu erstellen. Diese Vorgehensweise kann anderen Teammitgliedern Unannehmlichkeiten bereiten, die möglicherweise einen Datenbank-Dump über Slack anfordern müssen. Um das Projekt voranzutreiben und die Konsistenz aufrechtzuerhalten, ist es wichtig, Migrationen effektiv zu nutzen.
Anonyme Migrationen sind eine effektive Lösung, um Klassennamenkonflikte zu vermeiden. Mit dieser Funktion können Sie mehrere Migrationen mit dem Namen „update_posts_table“ erstellen, ohne dass Fehler auftreten, wodurch die Reibung während des Entwicklungsprozesses verringert wird.
Wenn Sie in Laravel 9 und höher den folgenden Befehl ausführen, werden automatisch anonyme Migrationen generiert:
use App\Http\Requests\StorePostRequest; class PostController { public function store(StorePostRequest $request) { $validated = $request->validated(); Post::create($validated); // Other logic... } }
Die Struktur dieser Migrationen sieht folgendermaßen aus:
public function prepareForValidation() { $this->merge([ 'slug' => Str::slug($this->title), ]); }
Interessanterweise können Sie in Laravel 8 auch anonyme Migrationen implementieren. Ersetzen Sie dazu einfach den Klassennamen durch „return new class“ und achten Sie darauf, am Ende ein Semikolon einzufügen. Auf diese Weise können Sie auch in früheren Versionen die Vorteile anonymer Migrationen genießen.
Die down()-Methode wird vom PHP-Artist-Befehl migrate:rollback verwendet, um an der Datenbank vorgenommene Änderungen rückgängig zu machen. Wenn sich einige Entwickler für die Implementierung entscheiden, andere jedoch nicht, ist es wichtig sicherzustellen, dass Ihre down()-Methode korrekt definiert ist, wenn Sie sie verwenden.
Im Wesentlichen sollte die down()-Methode die in der up()-Methode ausgeführten Operationen umkehren. Hier ist ein einfaches Beispiel:
php artisan make:request StorePostRequest
Wenn Sie die down()-Methode lieber nicht verwenden möchten, können Sie sie einfach löschen.
Die Einhaltung der Tabellennamenskonventionen von Laravel ist eine einfache Best Practice, die Ihrem Team großen Nutzen bringen kann. Wenn Sie Artisan-Befehle verwenden, verarbeitet das Framework diese Konventionen automatisch, z. B. php artisan make:model Post --migration --factory.
Wenn Sie diese Befehle aus irgendeinem Grund nicht verwenden können, finden Sie hier eine Kurzanleitung:
Für ein Modell mit dem Namen „Post“ sollte die entsprechende Tabelle den Namen „Posts“ tragen, wobei die Pluralform verwendet wird. Zum Beispiel:
Für eine Pivot-Tabelle, die Beitrag und Kommentar verbindet (z. B. comment_post):
Weitere Einzelheiten finden Sie in der offiziellen Dokumentation.
Es gibt noch mehr Best Practices zu behandeln! Sind Sie auf das N 1-Problem gestoßen? Eifriges Laden ist ein wirksames Mittel, um ihnen vorzubeugen.
Wenn Sie beispielsweise eine Liste mit 30 Beiträgen und ihren Autoren anzeigen, führt Eloquent aufgrund von Lazy Loading eine Abfrage für die 30 Beiträge und dann weitere 30 Abfragen für jeden Autor durch (d. h. jedes Mal, wenn Sie $post aufrufen). ->user in Ihrem Code, es ruft die Benutzerbeziehung ab).
Die Lösung ist einfach: Verwenden Sie die Methode with(), um die Anzahl der Abfragen von 31 auf 2 zu reduzieren.
use App\Http\Requests\StorePostRequest; class PostController { public function store(StorePostRequest $request) { $validated = $request->validated(); Post::create($validated); // Other logic... } }
Um N 1-Probleme zu vermeiden, können Sie die Anwendung so konfigurieren, dass immer dann eine Ausnahme ausgelöst wird, wenn eine Beziehung verzögert geladen wird. Diese Einschränkung sollte nur in lokalen Umgebungen erzwungen werden.
public function prepareForValidation() { $this->merge([ 'slug' => Str::slug($this->title), ]); }
Der strikte Modus von Eloquent ist ein wertvolles Debugging-Tool. Es hilft Entwicklern, potenzielle Probleme während der Entwicklung zu erkennen, indem es in verschiedenen Szenarien Ausnahmen auslöst:
Um den strikten Modus zu aktivieren, fügen Sie den folgenden Code zur boot()-Methode von AppServiceProvider.php hinzu:
php artisan make:request StorePostRequest
Laravel 9 hat eine neue Möglichkeit eingeführt, Accessoren und Mutatoren zu deklarieren. So implementieren Sie sie jetzt:
use App\Http\Requests\StorePostRequest; class PostController { public function store(StorePostRequest $request) { $validated = $request->validated(); Post::create($validated); // Other logic... } }
Mit dieser neuen Syntax können Sie Accessoren und Mutatoren prägnanter definieren. Sie können auch rechenintensive Werte zwischenspeichern:
public function prepareForValidation() { $this->merge([ 'slug' => Str::slug($this->title), ]); }
Im Gegensatz dazu sah die vorherige Methode so aus:
php artisan make:controller ShowPostController --invokable
Der Wechsel zur neuen Syntax vereinfacht den Code und verbessert die Lesbarkeit.
Wenn Sie zeitaufwändige Aufgaben erledigen (z. B. das Versenden von E-Mails nach dem Absenden eines Kontaktformulars), können Sie die Benutzererfahrung verbessern, indem Sie die Aufgabe verzögern, bis der Server dem Benutzer geantwortet hat. Hier kommt „dispatchAfterResponse()“ ins Spiel, mit dem Sie lang laufende Prozesse verschieben können:
use App\Http\Controllers\ShowPostController; // Single action controller route Route::get('/posts/{post}', ShowPostController::class);
Alternativ können Sie, wenn Sie Aufgaben lieber mit einer anonymen Funktion planen möchten, dies wie folgt tun:
php artisan make:middleware CheckTokens
Durch die Verwendung von „dispatchAfterResponse()“ stellen Sie sicher, dass Benutzer eine schnellere Antwort vom Server erhalten, während Hintergrundaufgaben die Benutzererfahrung nicht beeinträchtigen.
Bei der Verarbeitung rechenintensiver Aufgaben (z. B. der Verarbeitung von vom Benutzer hochgeladenen Bildern) kann die sofortige Ausführung dieser Vorgänge den Server überlasten und zu einer schlechten Benutzererfahrung führen. So beheben Sie das Problem:
Das Warteschlangensystem von Laravel ermöglicht es Ihnen, diese lang andauernden Aufgaben so zu verschieben, dass sie in einer geordneten oder kontrollierten parallelen Weise ausgeführt werden, um sicherzustellen, dass der Server reaktionsfähig bleibt und Benutzer nicht warten müssen.
Um die Aufgabenverwaltung zu erleichtern, sollten Sie die Verwendung von Laravel Horizon in Betracht ziehen, das eine Benutzeroberfläche zur effizienten Überwachung und Steuerung von Warteschlangenaufgaben bietet. Auf diese Weise können Sie komplexe Prozesse im Hintergrund abwickeln und gleichzeitig eine reibungslose Leistung gewährleisten.
Beim Testen in einer lokalen Umgebung ist es am besten, bei jeder Testausführung eine neue Datenbank zu verwenden. Laravel bietet eine effiziente Möglichkeit, dies zu bewältigen, indem es die Datenbank vor jedem Test langsam aktualisiert. Dies kann mithilfe der RefreshDatabase-Eigenschaft in Ihrer Testklasse erreicht werden. Dadurch wird sichergestellt, dass die Datenbank bei jeder Testausführung in einem sauberen Zustand ist, wodurch potenzielle Probleme durch übrig gebliebene Daten vermieden werden.
Verwenden Sie das RefreshDatabase-Merkmal in Ihrer Testklasse:
php artisan make:request StorePostRequest
Bei der Verwaltung sensibler Informationen ist die Gewährleistung der Sicherheit von entscheidender Bedeutung. Hier sind einige Best Practices:
Speichern Sie sensible Informationen (wie API-Schlüssel und Datenbankanmeldeinformationen) in der .env-Datei und nicht in der Codebasis.
Für Daten, die verschlüsselt werden müssen, nutzen Sie die Verschlüsselungsfunktionen von Laravel:
use App\Http\Requests\StorePostRequest; class PostController { public function store(StorePostRequest $request) { $validated = $request->validated(); Post::create($validated); // Other logic... } }
Stellen Sie sicher, dass Sie die Anwendungsschlüssel (APP_KEY) regelmäßig aktualisieren und die Daten nach Aktualisierungen neu verschlüsseln.
Indem Sie diese Best Practices, Tipps und Tricks befolgen, können Sie die Qualität und Sicherheit Ihrer Laravel-Anwendungen erheblich verbessern. Diese Methoden helfen Ihnen nicht nur, effizienteren Code zu schreiben, sondern bieten Ihren Benutzern auch ein besseres Erlebnis. Wenn Sie diese Praktiken weiterhin erlernen und anwenden, können Sie in Ihrer Entwicklung größere Erfolge erzielen.
Das obige ist der detaillierte Inhalt vonLaravel Best Practices, Tipps und Tricks für 5. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!