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

acquaintsoft logo
Acquaint Softtech

Hire Laravel developers with AI expertise at $20/hr. Get started in 48 hours.

Visit Acquaint Softtech

The latest

View all →
Volker Dusch on the PHP RCE Vulnerabilities and Disclosure image

Volker Dusch on the PHP RCE Vulnerabilities and Disclosure

Read article
Decide with Jev: Turn AI Answers into Decisions with PHP Rules image

Decide with Jev: Turn AI Answers into Decisions with PHP Rules

Read article
Skuul: Open-Source School Management Built on Laravel image

Skuul: Open-Source School Management Built on Laravel

Read article
Laravel Read Replicas: Prevent Stale Reads After a Write image

Laravel Read Replicas: Prevent Stale Reads After a Write

Read article
Screenshot: Capture Images and PDFs with PHP and Laravel image

Screenshot: Capture Images and PDFs with PHP and Laravel

Read article
Reset Sticky Database Connections Between Laravel Queue Jobs image

Reset Sticky Database Connections Between Laravel Queue Jobs

Read article