Zum Inhalt springen

Laravel Release Notes

519 Einträge aus 4 Quellen. Zuletzt aktualisiert:

Folge Laravel, um die Release Notes in deinen Feed zu holen.

Angaben zum Datum

Datum aus der Quelle.

Erstmals gesehen am .

Laravel

useSocketId()-Hook für React, Vue und Svelte (Echo)

Die drei Echo-Adapter für React, Vue und Svelte liefern einen reaktiven Hook useSocketId(), der die aktuelle Socket-ID bereitstellt und sich bei erneuter Verbindung automatisch aktualisiert.

Pull request by @hectorgrecco

All three Echo framework adapters now ship a useSocketId() reactive hook that gives you the current socket ID and automatically updates when the connection reconnects with a new one. Pass it in an X-Socket-Id header to prevent your own broadcast events from being received back.

// React
import { useSocketId } from "@laravel/echo-react";
const socketId = useSocketId();

// Vue
import { useSocketId } from "@laravel/echo-vue";
const socketId = useSocketId(); // ComputedRef<string | undefined>

// Svelte
import { useSocketId } from "@laravel/echo-svelte";
const socketId = useSocketId(); // getter function

Originalquelle(öffnet in neuem Tab)Problem melden

Angaben zum Datum

Datum aus der Quelle.

Erstmals gesehen am .

Laravel

Sail: Build-Argument PHP_EXTENSIONS für zusätzliche PHP-Extensions

Über das Build-Argument PHP_EXTENSIONS in docker-compose.yml lassen sich zusätzliche PHP-Extensions in Sail installieren, ohne das Dockerfile zu veröffentlichen und zu bearbeiten.

Pull request by @sydgren

Installing extra PHP extensions in Sail no longer requires publishing and hand-editing the Dockerfile. Pass a PHP_EXTENSIONS build argument in docker-compose.yml with a space-separated list of extensions, and Sail's Dockerfile will install them at build time.

services:
    laravel.test:
        build:
            context: ./vendor/laravel/sail/runtimes/8.4
            dockerfile: Dockerfile
            args:
                WWWGROUP: "${WWWGROUP}"
                PHP_EXTENSIONS: "gmp imagick"

Existing builds are unaffected - the argument defaults to empty.

Originalquelle(öffnet in neuem Tab)Problem melden

Angaben zum Datum

Datum aus der Quelle.

Erstmals gesehen am .

Laravel

Laravel 13.x: Blade-Direktive @fonts und Vite-Font-Optimierung

Die neue Blade-Direktive @fonts liest vom Vite-Font-Plugin erzeugte Manifeste und fügt automatisch Preload-Links, Inline-Styles und Push-Header ein, optional beschränkt auf bestimmte Font-Aliase.

Pull request by @WendellAdriel

Loading web fonts has always involved a bit of ceremony - preload links, @font-face rules, HTTP/2 server push headers. The new @fonts Blade directive handles all of that automatically by reading font manifests generated by the Vite font plugin, injecting the right <link rel="preload"> tags, inline styles, and push headers in one shot.

<!DOCTYPE html>
<html>
    <head>
        @fonts
        @vite("resources/js/app.js")
    </head>
</html>

Need only a subset of your configured families on a given page? Pass their aliases:

@fonts(["sans", "mono"])

Originalquelle(öffnet in neuem Tab)Problem melden

Angaben zum Datum

Datum aus der Quelle.

Erstmals gesehen am .

Laravel

Laravel 13.x: Neuer Cache-Store storage

Das Cache-System unterstützt nun einen dateisystembasierten storage-Treiber, mit dem sich ein vorhandener Disk wie S3 als Key/Value-Cache nutzen lässt.

Pull request by @taylorotwell

Laravel's cache system now supports a storage driver backed by the filesystem, making it straightforward to use an existing disk - like S3 - as a key/value cache without any additional infrastructure.

Originalquelle(öffnet in neuem Tab)Problem melden

Angaben zum Datum

Datum aus der Quelle.

Erstmals gesehen am .

Laravel

Laravel 13.x: Optionaler Disk-Speicher für große SQS-Queue-Payloads

Über extended_store_options in der SQS-Konfiguration lassen sich Payloads, die das 1-MB-Limit überschreiten, optional auf einen Disk wie S3 auslagern, wobei Worker sie transparent laden.

Pull request by @Orrison

SQS has a 1 MB message size cap, and large job payloads will hit it eventually. This new opt-in feature automatically offloads payloads that exceed the limit to a configured filesystem disk - like S3 - sending a small pointer through the queue instead. Workers pick up the real payload transparently on the other side.

Add an extended_store_options block to your SQS connection config to get started:

'sqs' => [
    // ...
    'extended_store_options' => [
        'enabled' => env('SQS_STORE_ENABLED', false),
        'disk'    => env('SQS_STORE_DISK', 's3'),
        'prefix'  => env('SQS_STORE_PREFIX', ''),
        'always'  => false,
        'cleanup' => true,
    ],
],

Set always to true to route every payload through disk regardless of size. With cleanup enabled, the stored file is removed once the job processes successfully.

Originalquelle(öffnet in neuem Tab)Problem melden

Angaben zum Datum

Datum aus der Quelle.

Erstmals gesehen am .

Laravel

Laravel 13.x: Password-Regel als passwordrules-String ausgeben

Die neue Methode toPasswordRulesString() an der Password-Regel wandelt Validierungsvorgaben in das HTML-Attribut passwordrules um, damit Passwortmanager passende Passwörter erzeugen können.

Pull request by @imliam

Password managers like 1Password and Safari can read the passwordrules HTML attribute to generate passwords that satisfy your app's policy - no more rejected passwords and frustrated users at registration. The new toPasswordRulesString() method on the Password rule converts your validation constraints into the right format automatically.

<input
    type="password"
    autocomplete="new-password"
    passwordrules="{{ Password::defaults()->toPasswordRulesString() }}"
/>

The method maps directly from your existing validation rules:

Password::min(12)->max(64)->mixedCase()->numbers()->symbols()->toPasswordRulesString()
// 'minlength: 12; maxlength: 64; required: lower; required: upper; required: digit; required: special;'

Originalquelle(öffnet in neuem Tab)Problem melden

Angaben zum Datum

Datum aus der Quelle.

Erstmals gesehen am .

Laravel

Laravel 13.x: Jobs können auf Worker-Signale reagieren

Das neue Interface Interruptible erlaubt laufenden Jobs, bei einem SIGTERM des Queue-Workers etwa Schleifen zu stoppen, Locks freizugeben oder den Zustand zu sichern.

Pull request by @jackbayliss

When a queue worker receives a SIGTERM during a deployment, any running job normally has no idea it's about to be cut off. The new Interruptible interface lets jobs react - stop loops, release locks, save state - before the worker shuts down.

use Illuminate\Contracts\Queue\Interruptible;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Queue\Queueable;

class SignalJob implements ShouldQueue, Interruptible
{
    use Queueable;

    protected bool $stop = false;

    public function handle(): void
    {
        while (!$this->stop) {
            sleep(1);
            // Do work...
        }
    }

    public function interrupted(int $signal): void
    {
        $this->stop = true;
    }
}

Originalquelle(öffnet in neuem Tab)Problem melden

Angaben zum Datum

Datum aus der Quelle.

Erstmals gesehen am .

Laravel

Laravel 13.x: Umgebungsfilter für schedule:list

Das neue Flag --environment bei schedule:list zeigt nur die Tasks an, die in der angegebenen Umgebung tatsächlich laufen.

Pull request by @m-fi

Running schedule:list on production used to show every registered task - including those that only run locally. A new --environment flag filters the output to just the tasks that actually run in the specified environment.

php artisan schedule:list --environment=production

Originalquelle(öffnet in neuem Tab)Problem melden

Angaben zum Datum

Datum aus der Quelle.

Erstmals gesehen am .

Laravel

Laravel 13.x: Option --stop-when-empty-for für den Queue-Worker

Die neue Option --stop-when-empty-for bei queue:work beendet den Worker, nachdem er eine festgelegte Anzahl Sekunden untätig war.

Pull request by @taylorotwell

A new --stop-when-empty-for option on queue:work stops the worker after it has been idle for a configurable number of seconds. Useful for auto-scaling setups where workers should wind down rather than sit idle indefinitely.

php artisan queue:work --stop-when-empty-for=60

Originalquelle(öffnet in neuem Tab)Problem melden

Angaben zum Datum

Datum aus der Quelle.

Erstmals gesehen am .

Laravel

Laravel 13.x: Schema-Helper foreignUuidFor

Der neue Migrations-Helper foreignUuidFor leitet Spaltenname, Zieltabelle und Primärschlüssel aus dem Model ab, wie foreignIdFor, jedoch für UUID-basierte Beziehungen.

Pull request by @Tresor-Kasenda

A new foreignUuidFor migration helper joins foreignIdFor in the schema builder. It infers the column name, related table, and referenced primary key from the model - the same convenience as foreignIdFor, but explicitly for UUID-backed relationships.

$table->foreignUuidFor(User::class)->constrained();

Originalquelle(öffnet in neuem Tab)Problem melden

Angaben zum Datum

Datum aus der Quelle.

Erstmals gesehen am .

Laravel

Laravel 13.x: cache:clear kann per prohibit() gesperrt werden

ClearCommand (cache:clear) unterstützt nun prohibit(), denselben Schutzmechanismus wie bei db:fresh und migrate:fresh, etwa für gehostete Umgebungen.

Pull request by @jackbayliss

cache:clear now supports prohibit(), the same opt-in protection mechanism available on db:fresh, migrate:fresh, and other commands you'd want to block in hosted environments.

ClearCommand::prohibit($inHostedEnvironments);

Originalquelle(öffnet in neuem Tab)Problem melden

Angaben zum Datum

Datum aus der Quelle.

Erstmals gesehen am .

Laravel

Laravel 13.x: Parameter normalize für Str::studly() und Str::pascal()

Mit dem optionalen Parameter normalize: true werden komplett großgeschriebene Wortsegmente vor der Umwandlung in Kleinbuchstaben gesetzt, sodass etwa aus CBOR das Ergebnis Cbor wird; der Standardwert false erhält das bisherige Verhalten.

Pull request by @hotmeteor

All-caps strings like CBOR or ALL_CAPS used to pass through Str::studly() unchanged - ucfirst has nothing to do when every letter is already uppercase. An optional normalize: true parameter lowercases all-uppercase word segments before conversion, giving you the expected output.

Str::studly('CBOR', normalize: true)      // 'Cbor'
Str::studly('ALL_CAPS', normalize: true)  // 'AllCaps'

Mixed-case strings are left untouched, and the default is false so existing behavior is preserved.

Originalquelle(öffnet in neuem Tab)Problem melden

Angaben zum Datum

Datum aus der Quelle.

Erstmals gesehen am .

Laravel

Laravel 13.x: JSON-Fehlerantworten für API-Routen standardmäßig

Neue Laravel-13.x-Anwendungen liefern bei Fehlern auf api/*-Routen standardmäßig JSON-Antworten, auch ohne Accept: application/json-Header, konfiguriert über shouldRenderJsonWhen() in bootstrap/app.php.

Pull request by @LucasCavalheri

New Laravel 13.x applications now return JSON error responses from api/* routes by default - no Accept: application/json header required from the client. Tools like Postman, curl, and API clients get sensible responses right away. The behavior is configured in bootstrap/app.php using the existing shouldRenderJsonWhen() API:

$exceptions->shouldRenderJsonWhen(
    fn (Request $request) => $request->is('api/*') || $request->expectsJson(),
);

Originalquelle(öffnet in neuem Tab)Problem melden

Angaben zum Datum

Datum aus der Quelle.

Erstmals gesehen am .

Laravel

Laravel 13.x: pao standardmäßig im Skeleton enthalten

nunomaduro/pao ist nun im Laravel-Basis-Skeleton enthalten und liefert in jeder neuen Anwendung strukturierte Ausgaben für KI-Agenten.

Pull request by @nunomaduro

nunomaduro/pao is now included in the base Laravel skeleton, bringing structured AI agent output to every new application out of the box.

Originalquelle(öffnet in neuem Tab)Problem melden

Angaben zum Datum

Datum aus der Quelle.

Erstmals gesehen am .

Laravel

Inertia 3.x: Option mode für router.poll

Die neue Option mode bei router.poll() und usePoll steuert mit cancel, rest oder overlap, wie sich überlappende Polling-Anfragen verhalten.

Pull request by @pascalbaljet

When a polled request takes longer than the configured interval, subsequent requests can pile up on the server. A new mode option on router.poll() and usePoll gives you control over how overlapping requests are handled - cancel aborts any in-flight request before starting the next, rest waits the full interval after each response so requests never overlap, and overlap preserves the existing behavior.

router.poll(2000, {}, { mode: "cancel" });
router.poll(2000, {}, { mode: "rest" });

Originalquelle(öffnet in neuem Tab)Problem melden

Angaben zum Datum

Datum aus der Quelle.

Erstmals gesehen am .

Laravel

Inertia 3.x: Dynamische Daten in usePoll

usePoll akzeptiert nun als zweites Argument eine Funktion, die bei jedem Poll neu ausgewertet wird, sodass Anfragen stets aktuelle Daten enthalten.

Pull request by @pascalbaljet

usePoll previously captured its request options once at mount, so reactive values from props would go stale on every subsequent tick. You can now pass a function as the second argument - Inertia re-evaluates it on each poll, so your requests always carry fresh data.

usePoll(10_000, () => ({
    only: ["notifications"],
    data: { since: lastSeenAt },
}));

Originalquelle(öffnet in neuem Tab)Problem melden

Angaben zum Datum

Datum aus der Quelle.

Erstmals gesehen am .

Laravel

Inertia 3.x: router.once für einmalige Events

Mit router.once() lassen sich einmalige Event-Listener registrieren, ohne remove() manuell im Callback aufrufen zu müssen.

Pull request by @sebastiandedeyne

Registering a one-time event listener previously meant calling remove() manually inside your own callback. router.once() handles the cleanup for you.

// Before
const remove = router.on("before", () => {
    remove();
    // ...
});

// After
router.once("before", () => {
    // ...
});

Originalquelle(öffnet in neuem Tab)Problem melden

Angaben zum Datum

Datum aus der Quelle.

Erstmals gesehen am .

Laravel

Inertia 3.x: rescue-Slot für fehlgeschlagene Deferred Props

Ein neuer rescue-Slot wird gerendert, wenn eine Deferred Prop mit rescue: true serverseitig fehlschlägt, und bietet ein reloading-Flag zum Aufbau einer Retry-Oberfläche.

Pull request by @pascalbaljet

When a deferred prop throws on the server using rescue: true, the frontend previously had no way to surface the failure - users would sit on the loading fallback indefinitely. The new rescue slot renders when a prop has been rescued, with a reloading boolean so you can build a proper retry UI.

return Inertia::render('Dashboard', [
    'stats' => Inertia::defer(fn () => Github::stats(), rescue: true),
]);
<Deferred data="stats">
  <template #fallback>
    <div>Loading...</div>
  </template>

  <template #rescue="{ reloading }">
    <button :disabled="reloading" @click="router.reload({ only: ['stats'] })">
      Retry
    </button>
  </template>

  <StatsOverview :stats="stats" />
</Deferred>

Originalquelle(öffnet in neuem Tab)Problem melden

Angaben zum Datum

Datum aus der Quelle.

Erstmals gesehen am .

Laravel

Inertia 3.x: Besserer CSP-Support für Fortschrittsbalken und Fehlerdialog

Apps mit Content Security Policy können in createInertiaApp einmalig eine nonce setzen, die automatisch auf die von Inertia eingefügten Inline-Styles für Fortschrittsbalken und Fehlerdialog angewendet wird.

Pull request by @pascalbaljet

Apps enforcing a Content Security Policy can now configure a nonce once in createInertiaApp - it's applied automatically to the inline styles Inertia injects for the progress bar and error dialog.

createInertiaApp({
    nonce: "...",
});

Originalquelle(öffnet in neuem Tab)Problem melden

Angaben zum Datum

Datum aus der Quelle.

Erstmals gesehen am .

Laravel

Inertia 3.x: Fehlerdialog-iFrame wird gesandboxt

Der iframe im Fehlerdialog für Nicht-Inertia-Antworten erhält sandbox="allow-scripts", sodass enthaltene Skripte nicht mehr auf window.parent zugreifen können, ohne dass API-Änderungen nötig sind.

Pull request by @pascalbaljet

When Inertia displays a non-Inertia response in its error dialog, the content is rendered inside an iframe. This change adds sandbox="allow-scripts" to that iframe, blocking scripts inside from reaching window.parent and interacting with your application. No API changes required.

Originalquelle(öffnet in neuem Tab)Problem melden