Цього тижня команда Laravel випустила версію 12.29.0, яка включає нову локальну сторінку для відлагодження, драйвер кеш-сесій, PHP-атрибути для ресурсів моделей та багато іншого
Рюта Хамасакі та Джеремі Батлер представили нову локальну сторінку помилок для застосунків Laravel. Вона зберігає кнопку "Копіювати як Markdown", введену в 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;
}
}
Лука Патера додав можливість визначення ресурсних класів безпосередньо в моделі за допомогою атрибутів 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 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:
with() від @browner12 в https://github.com/laravel/framework/pull/56975MessageLogged і звуження $level від @cosmastech в https://github.com/laravel/framework/pull/56989with() допомогу, коли другий аргумент не передається від @browner12 в https://github.com/laravel/framework/pull/56986Castable в Enum від @jrseliga в https://github.com/laravel/framework/pull/56977with() від @browner12 в https://github.com/laravel/framework/pull/57041laravel-cloud-socket підкорюється LOG_LEVEL від @PeteBishwhip в https://github.com/laravel/framework/pull/57071