Zwischen Version 13.17 und 13.27 veröffentlichte Laravel in weniger als drei Monaten elf Minor-Releases, die Routing, Datenbankverbindungen, Queues, Bildverarbeitung, Validierung und Sicherheit betreffen.
DB::transaction(function () use ($product) {
$product->refreshForUpdate();
if ($product->stock === 0) {
throw new RuntimeException('Product is out of stock.');
}
$product->decrement('stock');
});13.17 führte eine metadata()-Methode für Routen ein, mit der sich beliebige Daten wie Seitentitel anhängen lassen, ohne das Action-Array zu missbrauchen; Metadaten auf Gruppenebene vererben sich automatisch an untergeordnete Routen. Zudem unterstützt Laravel nun PostgreSQL-Connection-Pooler wie PgBouncer, RDS Proxy und Neon über ein "pooled"-Flag in der Konfiguration, kombiniert mit einer separaten "direct"-URL, damit Befehle wie Migrationen den Pooler umgehen.
13.18 verbessert die Beobachtbarkeit von Queues: Das WorkerStopping-Event liefert jetzt jobsProcessed und lastJobProcessedAt, und schedule:work fängt SIGINT, SIGTERM und SIGQUIT ab, sodass ein laufender geplanter Task vor dem Herunterfahren abgeschlossen werden kann, etwa in Kubernetes-Umgebungen.
13.19 bringt Unterstützung für das HTTP-Verb QUERY über Http::query(), die Collection-Methode reduceInto() zum direkten Verändern eines Akkumulator-Objekts sowie Str::counted() zur Formatierung von Zählangaben wie "3 orders".
13.20 liefert mit Illuminate\Image eine hauseigene Bildverarbeitungskomponente für Größenänderung, Zuschnitt und Formatkonvertierung, sodass die manuelle Einbindung von Intervention Image entfällt. Jede Transformation erzeugt eine neue, unveränderliche Instanz, sodass sich aus einem Ausgangsbild mehrere Varianten ableiten lassen. Als optionaler Treiber kommt Intervention Image v4 zum Einsatz, das separat per Composer installiert werden muss. Zusätzlich gibt es das Attribut #[WithoutMiddleware], um Middleware für einzelne Methoden auszuschließen.
13.21 fügt das Attribut #[RouteKey] hinzu, mit dem sich die Spalte für Route-Model-Binding an Eloquent-Modellen festlegen lässt, ohne eine Methode zu überschreiben, sowie weitere Bildformate (PNG, GIF, AVIF, BMP) und eine base64-Validierungsregel nach RFC 4648.
13.22 bringt Validator::fakeDnsLookups(), damit Tests mit active_url oder email:dns nicht mehr wegen Netzwerkschwankungen fehlschlagen, sowie das Attribut #[BindWhen] für bedingte Container-Bindings per Closure, was PHP 8.5 voraussetzt.
13.23 fügt einen monatlichen Log-Treiber für Anwendungen ohne tägliche Log-Rotation hinzu und verschärft die Sicherheit: Der Geheimnisvergleich im Wartungsmodus nutzt jetzt durchgehend hash_equals() statt einer Mischung aus hash_equals() und ==.
13.24 bringt dominantColor(), um während des Ladens einen Platzhalter aus der dominanten Bildfarbe zu erzeugen, akzeptiert HEIC und HEIF nun als gültige Eingabeformate statt sie abzulehnen, und führt die Validierungsregel arrayKeys ein, die erlaubte Schlüssel eines Arrays einschränkt.
13.25 erlaubt es, mit queue:pause --all und queue:resume --all alle benannten Queues auf einmal zu pausieren oder fortzusetzen, statt jede einzeln anzusprechen. Der Befehl artisan dev nutzt jetzt eine neue Terminal-Oberfläche auf Basis von @laravel/multiplex mit eigenen Tabs für Server, Queue, Vite und Logs sowie automatischem Neustart bei Abstürzen. Image implementiert außerdem das Responsable-Interface und lässt sich damit direkt aus einer Route zurückgeben.
13.26 bringt einen "Read-Through"-Dateisystemtreiber, der zuerst von einer primären Festplatte liest und bei fehlender Datei auf eine ältere ausweicht, wobei abgerufene Dateien automatisch auf die primäre Platte übertragen werden, praktisch für schrittweise Speicher-Migrationen. Das Attribut #[DebounceFor], bisher nur für Jobs nutzbar, funktioniert nun auch für Queued Event Listener.
13.27, die aktuellste Version, fügt die Datenbank-Konfigurationsoption mask_bindings_in_exception_messages hinzu, die gebundene Werte in QueryException-Meldungen durch "?"-Platzhalter ersetzt und so verhindert, dass etwa E-Mail-Adressen in Logs, die failed_jobs-Tabelle oder APM-Tools gelangen; getBindings() liefert weiterhin die echten Werte zum Debuggen. Ebenfalls neu ist whereBinary() für case-sensitive Spaltenvergleiche auf MySQL und MariaDB ohne Raw-SQL, sowie refreshForUpdate(): eine Eloquent-Methode, die eine bereits geladene Modellinstanz aktualisiert und dabei lockForUpdate() in einem Aufruf anwendet, sodass für eine pessimistische Sperre keine erneute Abfrage per Primärschlüssel innerhalb einer Transaktion mehr nötig ist.




Kommentare
Noch keine Kommentare — schreib den ersten.
Starte die Diskussion
Kein Konto, kein Passwort nötig — gib einfach deine E-Mail-Adresse ein, wir senden dir einen einmaligen Anmelde-Link. Beim ersten Mal bist du damit automatisch angemeldet.
Deine Bewertung wird nach der Anmeldung automatisch übernommen.
Schau in dein Postfach
Wir haben einen Anmelde-Link an … gesendet. Öffne ihn auf diesem Gerät — dieser Tab meldet dich automatisch an.
Nichts angekommen? Wirf einen Blick in den Spam-Ordner — und markiere die Mail dort als „Kein Spam“, dann landet sie künftig direkt im Postfach.