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

PAO: Agent-Hinweise in der PHPStan-JSON-Ausgabe

Die JSON-Ausgabe von PAO enthält für PHPStan nun ein Feld instructions mit derselben Anleitung zur Fehlerbehandlung wie die Konsolenausgabe im Agent-Modus.

Pull request by @pushpak1300

PHPStan's agent-mode console output already includes instructions on how to handle errors correctly. PAO's JSON output now carries the same guidance in an instructions field, so agents using the JSON path get the same steer regardless of how they consume results.

{
    "tool": "phpstan",
    "result": "failed",
    "errors": 3,
    "error_details": {},
    "instructions": "Each error has an associated identifier... Do not add `@phpstan-ignore` comments..."
}

Originalquelle(öffnet in neuem Tab)Problem melden

Angaben zum Datum

Datum aus der Quelle.

Erstmals gesehen am .

Laravel

PAO: Neue Umgebungsvariable PAO_FORCE

Mit der neuen Umgebungsvariable PAO_FORCE=1 lässt sich PAO unabhängig von der Agent-Erkennung erzwingen, was etwa Tests in Docker-Containern vereinfacht.

Pull request by @antonkomarev

Running tests inside Docker means agent environment variables often don't propagate into the container. A new PAO_FORCE=1 env var force-enables PAO regardless of agent detection, so you can drop it into a docker compose run command without enumerating every possible agent marker in your compose config.

docker compose run --rm -e PAO_FORCE=1 app vendor/bin/pest

Originalquelle(öffnet in neuem Tab)Problem melden

Angaben zum Datum

Datum aus der Quelle.

Erstmals gesehen am .

Laravel

runWith() deaktiviert jetzt alle Agents

Der Test-Helfer runWith() deaktiviert während der Testausführung nun alle Agents statt nur Claude Code, sodass andere Agents die Testläufe nicht mehr stören.

Pull request by @cosmastech

The runWith() testing helper now correctly disables all agents during test execution, not just Claude Code. Previously, other agents could still interfere with test runs.

Originalquelle(öffnet in neuem Tab)Problem melden

Angaben zum Datum

Datum aus der Quelle.

Erstmals gesehen am .

Laravel

Passkeys: credentials: include über Passkeys.configure()

Die neue Methode Passkeys.configure() erlaubt es, das Fetch-Verhalten zu überschreiben, sodass Sanctum-SPA-Setups mit Frontend und API auf unterschiedlichen Domains funktionieren.

Pull request by @RobertBoes

The passkeys package previously hardcoded credentials: "same-origin", which breaks Sanctum SPA setups where the frontend and API live on different domains. A new Passkeys.configure() method lets you override the fetch behavior for cross-domain setups.

import { Passkeys } from "@laravel/passkeys";

Passkeys.configure({
    fetch: (input, init) => fetch(input, { ...init, credentials: "include" }),
});

Originalquelle(öffnet in neuem Tab)Problem melden

Angaben zum Datum

Datum aus der Quelle.

Erstmals gesehen am .

Laravel

Ranger erfasst API Resources und Arrayable-Antworten

Ranger berücksichtigt beim Sammeln von Route-Antworttypen nun Eloquent API Resources, JSON:API Resources und Arrayable-Klassen, und Inertia-Props werden über den ArrayableResolver aufgelöst, um genauere TypeScript-Typen zu erzeugen.

Pull request by @joetannenbaum

Ranger now picks up Eloquent API resources, JSON:API resources, and any arrayable class when collecting route response types. Inertia prop collection also runs class types through the ArrayableResolver, so toArray-style props are unwrapped into their underlying shape for accurate TypeScript generation.

Originalquelle(öffnet in neuem Tab)Problem melden

Angaben zum Datum

Datum aus der Quelle.

Erstmals gesehen am .

Laravel

Ranger beachtet $hidden, $visible und $appends

Die von Ranger erzeugten Typen berücksichtigen jetzt die Eloquent-Eigenschaften $hidden, $visible und $appends und entsprechen damit der tatsächlich serialisierten Antwort.

Pull request by @joetannenbaum

Eloquent's $hidden, $visible, and $appends properties now influence the types Ranger generates. Previously, the generated TypeScript could include attributes that would never appear in a serialized response, or miss custom appended accessors entirely. The resolved shape now matches what Eloquent actually serializes.

Originalquelle(öffnet in neuem Tab)Problem melden

Angaben zum Datum

Datum aus der Quelle.

Erstmals gesehen am .

Laravel

Reverb: Zeitsicherer Signaturvergleich bei der Pusher-HTTP-API

Die Signaturprüfung der Pusher-HTTP-API verwendet nun hash_equals() statt !==, um Timing-Angriffe beim HMAC-Vergleich zu verhindern.

Pull request by @pushpak1300

The Pusher HTTP API signature verifier was using PHP's !== for HMAC comparison, which short-circuits on the first non-matching byte and leaks timing information that can be exploited to forge signatures. This switches to hash_equals() for constant-time comparison - consistent with how Reverb's WebSocket channel verifier was already handling it.

Originalquelle(öffnet in neuem Tab)Problem melden

Angaben zum Datum

Datum aus der Quelle.

Erstmals gesehen am .

Laravel

Sail leitet neue KI-Agent-Umgebungsvariablen weiter

Sail reicht nun zusätzlich Umgebungsmarker für Cowork, Copilot und Kiro CLI an Anwendungscontainer weiter, damit Pakete wie PAO den aktiven Agent erkennen und Agent-Modus-Funktionen aktivieren.

Pull request by @pushpak1300

Sail now forwards environment markers for Cowork, Copilot, and Kiro CLI into application containers alongside the existing agent detection variables. Packages like PAO rely on these to identify the active agent - without them, agent-mode features silently don't activate when running inside Sail.

Originalquelle(öffnet in neuem Tab)Problem melden

Angaben zum Datum

Datum aus der Quelle.

Erstmals gesehen am .

Laravel

Surveyor löst spezielle Inertia-Prop-Typen auf

Surveyor ermittelt bei den Inertia-Wrappern defer, optional, lazy, always und merge nun den inneren Typ aus dem Callback, wobei defer, optional und lazy als optional markiert werden.

Pull request by @joetannenbaum

Inertia's defer, optional, lazy, always, and merge prop wrappers were previously falling through to reflection, which returned the wrapper class itself rather than the actual type inside. Surveyor now resolves the inner type directly from each wrapper's callback. defer, optional, and lazy are marked as optional since those props may not be present in the initial response.

Originalquelle(öffnet in neuem Tab)Problem melden

Angaben zum Datum

Datum aus der Quelle.

Erstmals gesehen am .

Laravel

Surveyor: @var-Docblocks überschreiben Typen bei Array-Elementen

Ein @var-Docblock direkt vor einem Array-Element überschreibt in Surveyor nun den abgeleiteten Typ, wenn die statische Analyse die genaue Form nicht erkennt.

Pull request by @JasBogans

Static analysis can't always follow deep Collection pipelines or SQL aliases down to a precise shape. A @var docblock placed immediately before an array item now overrides the inferred type, giving you an exact local escape hatch without changing any surrounding code.

return Inertia::render('Authors/createOrEdit', [
    'author' => $author,
    /** @var list<array{value:int,label:string}> */
    'categories' => Category::query()->orderBy('name')->get()
        ->map(fn (Category $c) => ['value' => $c->id, 'label' => $c->name])
        ->values()->all(),
]);

Originalquelle(öffnet in neuem Tab)Problem melden

Angaben zum Datum

Datum aus der Quelle.

Erstmals gesehen am .

Laravel

Surveyor: Inline-Variablenzuweisungen in Arrays korrekt behandelt

Inline-Zuweisungen in Arrays wie ['foo' => $bar = 42] werden in Surveyor nun zu einem konkreten Typ statt zu einem VariableState aufgelöst, was Folgefehler in Ranger und Wayfinder behebt.

Pull request by @bakerkretzmar

Surveyor was mishandling inline variable assignments inside arrays - patterns like ['foo' => $bar = 42] resolved to a VariableState instead of a concrete type, causing subtle bugs downstream in Ranger and Wayfinder. These are now unwrapped correctly.

Originalquelle(öffnet in neuem Tab)Problem melden

Angaben zum Datum

Datum aus der Quelle.

Erstmals gesehen am .

Laravel

Neuer Cache-Store storage

Das Cache-System unterstützt jetzt 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

Password::toPasswordRulesString() für passwordrules-Attribut

Die neue Methode toPasswordRulesString() der Password-Regel wandelt Validierungsregeln in einen passwordrules-String um, damit Passwortmanager wie 1Password und Safari konforme 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

Environment-Filter für den Befehl schedule:list

Mit dem neuen Flag --environment zeigt schedule:list nur noch 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

Neuer Schema-Helper foreignUuidFor

Der neue Migrations-Helper foreignUuidFor leitet Spaltenname, verknüpfte Tabelle und Primärschlüssel aus dem Model ab und ist für UUID-basierte Beziehungen gedacht.

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

cache:clear unterstützt jetzt prohibit()

Der Befehl cache:clear lässt sich nun wie db:fresh und migrate:fresh mit prohibit() sperren, etwa in gehosteten 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

Parameter normalize für Str::studly() und Str::pascal()

Ein optionaler Parameter normalize: true wandelt komplett großgeschriebene Wortsegmente vor der Konvertierung in Kleinbuchstaben um, sodass etwa 'CBOR' zu '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

nunomaduro/pao standardmäßig im Laravel-Skeleton

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

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: mode-Option 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: 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