Команда Laravel випустила версію v12.19.0, яка містить нові можливості, зокрема атрибут UseEloquentBuilder для PHP, каст AsFluent для моделей, проміжне програмне забезпечення FailOnException для завдань, можливість перевірки перенаправлення з помилками та інше:
Гристіян Манасієв запропонував атрибут UseEloquentBuilder, який дозволяє зареєструвати власний запит Eloquent для моделі. Цю функцію неодноразово обговорювали, і вона тепер доступна в Laravel 12 для тих, хто використовує кастомні конструктори запитів.
Раніше для використання кастомного конструктора потрібно було написати щось на кшталт:
class MyModel extends Model
{
// ...
public function newEloquentBuilder($query)
{
return new CustomBuilder($query);
}
}
Тепер ви можете скористатися атрибутом, наданим фреймворком:
use Illuminate\Database\Eloquent\Attributes\UseEloquentBuilder;
#[UseEloquentBuilder(CustomBuilder::class)]
class MyModel extends Model
{
// ...
}
Деталі можна знайти в Запиті на злиття #56025.
Азім Кардпур додав каст AsFluent для моделей.
namespace App\Models;
use Illuminate\Database\Eloquent\Casts\AsFluent;
use Illuminate\Database\Eloquent\Model;
class Passenger extends Model
{
protected function casts(): array
{
return [
'address' => AsFluent::class,
];
}
}
Після визначення касту моделі як флюент-екземпляра можна використовувати його з екземпляром моделі:
$passenger = Passenger::first();
// Отримання вкладених значень
$passenger->address->get('office.street');
$passenger->address->get('home.street');
// Оновлення як флюент-екземпляра...
$passenger->address = new Fluent([
'office' => ['street' => 'нова вулиця'],
'home' => ['street' => 'нова вулиця']
]);
// Або у вигляді масиву...
$passenger->address = [
'office' => ['street' => 'нова вулиця'],
'home' => ['street' => 'нова вулиця']
];
Деталі використання кастів моделей можна знайти в документації Eloquent: Mutators & Casting.
Люк Кузміш додав проміжне програмне забезпечення для черги завдань, що дозволяє завершувати завдання в разі виникнення конкретного виключення. За замовчуванням поведінка — повторне виконання завдання, якщо дозволено ще спроби. Використовуючи це проміжне, ви можете одразу з’ясувати, що завдання не матиме шансів на успіх:
use Illuminate\Queue\Middleware\FailOnException;
/**
* Отримати проміжне програмне забезпечення, через яке має пройти завдання.
*/
public function middleware(): array
{
return [
new FailOnException([AuthorizationException::class])
];
}
Клас FailOnException може приймати callable, якщо вам потрібна власна логіка, яка приймає виключення та екземпляр завдання:
new FailOnException(fn (\Throwable $e, mixed $job): bool => /* ... */);
Деталі доступні в розділі Завдання, що завершуються через конкретні виключення в документації по чергам.
Ахмед Алаа додав два методи для тестування відповідей, які дозволяють перевірити, чи перенаправляє відповідь на попередню сторінку, і чи є помилки в сесії:
$response->assertRedirectBackWithErrors(
array $keys = [], $format = null, $errorBag = 'default'
);
Другий хелпер навпаки — він перевіряє перенаправлення та підтверджує, що в сесії немає помилок:
$response->assertRedirectBackWithoutErrors();
Ці методи тепер задокументовані в офіційній документації 12.x.
Родріго Педра Брум додав метод fromUploadedFile() до класу Attachment для листів, що дозволяє перетворювати екземпляр UploadedFile на вкладення до листа.
use Illuminate\Mail\Attachment;
Attachment::fromUploadedFile($file);
Деталі можна знайти в Запиті на злиття #56027.
Ви можете ознайомитися з повним переліком нових функцій та оновлень нижче, а також переглянути зміни між версіями 12.18.0 та 12.19.0 на GitHub. Наступні примітки взято безпосередньо з змін:
getDefaultDescription від @jnoordsij в https://github.com/laravel/framework/pull/55990ComputesOnceableHashInterface від @Jacobs63 в https://github.com/laravel/framework/pull/56009symfony/console:7.4 від @crynobone в https://github.com/laravel/framework/pull/56015@return з конструкторів від @michaelnabil230 в https://github.com/laravel/framework/pull/56024FailOnException для завдань від @cosmastech в https://github.com/laravel/framework/pull/56037Досліджуйте нові можливості локалізації вашого Laravel-додатку з пакунками, які використовують штучний інтелект, такими як ChatGPT та Claude. Які рішення можуть спростити ваш процес перекладу та зробити його більш точним? Читайте далі, щоб дізнатися більше!
Laravel пропонує зручні методи для роботи з датами, які значно спрощують запити до бази даних. Досліджуйте, як ці інтуїтивно зрозумілі функції допомагають створювати чіткі та зрозумілі умови для роботи з часовими даними!
Досліджуйте новий пакет Data Model для PHP, який спрощує процес гідратації об'єктів без зайвих складнощів! Дізнайтеся, як впровадження типобезпечних об'єктів може революціонізувати ваш підхід до розробки, читаючи нашу статтю