News

A New Local Error Page in Laravel 12.29

Published
A New Local Error Page in Laravel 12.29 image

Release updates

Never miss a Laravel release

Get an email whenever a new Laravel release lands.

The Laravel team released version 12.29.0 this week with a new local debug page, a cache session driver, model resource PHP attributes, and more.

New Local Debug Page

Ryuta Hamasaki and Jeremy Butler created a brand-new local exception page for Laravel applications. The new exception page retains the "Copy as Markdown" button released in Laravel 12.25, and removes manual dark/light/toggle in favor of automatically detecting light vs. dark mode.

Local error page released in Laravel 12.29
Error page released in Laravel (v12.29.0)
Local error page with Dark mode
Error page with Dark mode (v12.29.0)
Previous local error page as shown in Laravel 12.25
Previous error page as shown in Laravel 12.25

See Pull Request #57036 for details.

Cache Session Driver

João Pedro Lopes—along with various community developers and core Laravel team members—contributed a cache session driver. It's best to read through the discussion and code in Pull Request #56887, but here's an example from that discussion of sticky database connections across requests:

namespace App\Http\Middleware;
 
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Context;
use Illuminate\Support\Facades\Date;
use Illuminate\Support\Facades\DB;
use Symfony\Component\HttpFoundation\Response;
 
class StickyWriteConnections
{
public function handle(Request $request, Closure $next): Response
{
if (! $request->hasSession()) {
return $next($request);
}
 
$expiry = $request->session()->cache()->get('use_write_connection_until');
 
$expiry?->isFuture()
&& DB::connection('pgsql')->useWriteConnectionWhenReading()
&& Context::addHidden('use_write_connection_until', $expiry);
 
$response = $next($request);
 
(DB::getConnections()['pgsql'] ?? null)?->hasModifiedRecords()
&& $request->session()->cache()->remember('use_write_connection_until', 10);
 
return $response;
}
}

UseResource and UseResource Collection Attributes

Luca Patera contributed the ability to define resource classes directly on a model using PHP attributes. Using these attributes, you can avoid boilerplate when converting a model to the intended resource:

// Before
$model->toResource(MyCustomNameResource::class);
$collection->toResourceCollection(MyCustomNameCollectionResource::class);
 
// After
$model->toResource();
$collection->toResourceCollection();

Model attributes are defined on the model class, as follows:

use App\Http\Resources\MyCustomNameResource;
use App\Http\Resources\MyCustomNameCollectionResource;
 
#[UseResource(MyCustomNameResource::class)]
#[UseResourceCollection(MyCustomNameCollectionResource::class)]
class MyModel extends Model {}

See Pull Request #56966 for details.

JSON Format Added to the schedule:list Command

Danny Foster contributed a --json flag to the schedule:list Artisan command. Returning this data as JSON is useful for monitoring deployments and integrations. Here's an example from the pull request:

[
{
"expression": "0 0 15 * *",
"repeat_seconds": null,
"command": "php artisan backup:run",
"description": "Run daily backup process",
"next_due_date": "2025-09-15 00:00:00 +00:00",
"next_due_date_human": "5 days from now",
"timezone": "UTC",
"has_mutex": false
}
]

This enables neat commands piped to things like the jq for monitoring to ensure scheduled tasks exist during a deployment, for example:

php artisan schedule:list --json | jq '.[] | select(.command | contains("backup"))'

Release notes

You can see the complete list of new features and updates below and the diff between 12.28.0 and 12.29.0 on GitHub. The following release notes are directly from the changelog:

v12.29.0

Paul Redmond photo

Staff writer at Laravel News. Full stack web developer and author.

Sponsored

laravelcloud logo
Laravel Cloud

Easily create and manage your servers and deploy your Laravel applications in seconds.

Visit Laravel Cloud

The latest

View all →
CPX: The Composer Package Executor for PHP image

CPX: The Composer Package Executor for PHP

Read article
Laravel AI SDK Adds Human-in-the-Loop Tool Approval image

Laravel AI SDK Adds Human-in-the-Loop Tool Approval

Read article
Pest 5 Released With Test Impact Analysis, Agent Verification, and Evals image

Pest 5 Released With Test Impact Analysis, Agent Verification, and Evals

Read article
Queue-SQL: Run Mass Deletes and Updates Across Parallel Queue Jobs image

Queue-SQL: Run Mass Deletes and Updates Across Parallel Queue Jobs

Read article
Blade Formatting in Laravel Pint image

Blade Formatting in Laravel Pint

Read article
Inertia DevTools Is Now on the Chrome Web Store image

Inertia DevTools Is Now on the Chrome Web Store

Read article