Нова локальна сторінка помилки в Laravel 12.29

Перекладено ШІ
Оригінал: Laravel News
Оновлено: 18 вересня, 2025
Цього тижня команда Laravel випустила версію 12.29.0, яка пропонує нову локальну сторінку налагодження, драйвер кешу для сесій, атрибути PHP для ресурсних моделей та багато іншого. Досліджуйте ці оновлення, щоб дізнатися, як вони можуть полегшити вашу роботу з Laravel

Цього тижня команда Laravel випустила версію 12.29.0, яка включає нову локальну сторінку для відлагодження, драйвер кеш-сесій, PHP-атрибути для ресурсів моделей та багато іншого

# Нова локальна сторінка для відлагодження

Рюта Хамасакі та Джеремі Батлер представили нову локальну сторінку помилок для застосунків Laravel. Вона зберігає кнопку "Копіювати як Markdown", введену в Laravel 12.25, і автоматично визначає режим світла/темряви, замість ручного перемикання

Локальна сторінка помилок в Laravel 12.29
Сторінка помилки в Laravel (v12.29.0)
Локальна сторінка помилок з темним режимом
Сторінка помилки в темному режимі (v12.29.0)
Попередня локальна сторінка помилок в Laravel 12.25
Попередня сторінка помилки в Laravel 12.25

Деталі можна знайти у Pull Request #57036

# Драйвер кеш-сесій

Жоао Педру Лопес разом з розробниками з громади та членами команди Laravel створили драйвер кеш-сесій. Рекомендуємо ознайомитися з обговоренням та кодом у Pull Request #56887. Ось приклад стабільних з'єднань з базами даних через запити:

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 та UseResourceCollection

Лука Патера додав можливість визначення ресурсних класів безпосередньо в моделі за допомогою атрибутів PHP. Це дозволяє уникнути зайвого коду при перетворенні моделі в ресурс:

// Раніше
$model->toResource(MyCustomNameResource::class);
$collection->toResourceCollection(MyCustomNameCollectionResource::class);

// Тепер
$model->toResource();
$collection->toResourceCollection(); 

Атрибути моделі визначаються в класі моделі таким чином:

use App\Http\Resources\MyCustomNameResource;
use App\Http\Resources\MyCustomNameCollectionResource;

#[UseResource(MyCustomNameResource::class)]
#[UseResourceCollection(MyCustomNameCollectionResource::class)]
class MyModel extends Model {}

Деталі можна знайти у Pull Request #56966

# JSON-формат для команди schedule:list

Денні Фостер додав параметр --json до команди schedule:list Artisan. Повернення даних у форматі JSON корисно для моніторингу розгортання та інтеграцій. Ось приклад з пул-реквесту:

[
  {
    "expression": "0 0 15 * *",
    "repeat_seconds": null,
    "command": "php artisan backup:run",
    "description": "Запустити процес резервного копіювання щоденно",
    "next_due_date": "2025-09-15 00:00:00 +00:00",
    "next_due_date_human": "через 5 днів",
    "timezone": "UTC",
    "has_mutex": false
  }
]

Це дозволяє запускати зручні команди, підключаючи такі інструменти, як jq, для моніторингу наявності запланованих завдань під час розгортання:

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

# Примітки до випуску

Повний список нових можливостей та оновлень ви можете знайти нижче. А також порівняння між версіями 12.28.0 та 12.29.0 на GitHub. Примітки щодо випуску взято з changelog:

# v12.29.0