Команда Laravel випустила версію 13.31.0, яка містить метод totalSize() для з'єднань черг, нову подію JobInterrupted, підтримку chaperone для pivot-моделей BelongsToMany та інші покращення.
Метод totalSize() для черг
Jack Bayliss додав метод totalSize(), який відповідає на питання "скільки всього завдань зараз у моєму з'єднанні черги?" До цього доводилося вручну підсумовувати кількість очікуваних, відкладених і зарезервованих завдань.
// Раніше
Queue::totalPendingSize() + Queue::totalDelayedSize() + Queue::totalReservedSize();
// Тепер
Queue::totalSize();
Це спрощує код і робить його більш читабельним.
Подія JobInterrupted
Jack Bayliss також додав нову подію JobInterrupted, яка спрацьовує, коли воркер перериває завдання, що реалізує контракт Interruptible. Це дозволяє прослуховувати цю подію та виконувати необхідне очищення чи логування.
use Illuminate\Queue\Events\JobInterrupted;
Event::listen(JobInterrupted::class, function (JobInterrupted $event) {
// Обробка переривання завдання
});
Тепер розробники можуть краще контролювати життєвий цикл завдань і реагувати на їх переривання.
Підтримка chaperone для pivot-моделей BelongsToMany
Caleb White додав підтримку chaperone для pivot-моделей BelongsToMany. Це дозволяє використовувати метод chaperone() у відношенні BelongsToMany для отримання екземпляра pivot-моделі.
Як пояснює автор, під час використання кастомних pivot-моделей часто визначають відношення BelongsTo на моделі, але їх використання вимагає завантаження моделей з бази даних, навіть якщо обидві моделі доступні під час гідратації BelongsToMany. Новий функціонал вирішує цю проблему.
class PostTagPivot extends Pivot
{
public function post(): BelongsTo
{
return $this->belongsTo(Post::class);
}
public function tag(): BelongsTo
{
return $this->belongsTo(Tag::class);
}
}
class Tag extends Model
{
public function posts(): BelongsToMany
{
return $this->belongsToMany(Post::class)
->using(PostTagPivot::class)
// автоматично визначає назви відношень
->chaperone();
// але можна перевизначити за потреби
->chaperone(declaring: 'tag', related: 'post');
}
}
class Post extends Model
{
public function tags(): BelongsToMany
{
return $this->belongsToMany(Tag::class)
->using(PostTagPivot::class)
->chaperone(declaring: 'post', related: 'tag');
}
}
Якщо кастомна pivot-модель не надається, виклик ->chaperone() не матиме ефекту.
URL сервера розробки Vite
@ramonmalcolm10 додав метод devServerUrl() до класу Vite, який дозволяє отримати URL сервера розробки Vite. Це корисно для генерації URL ресурсів у вашому застосунку під час розробки.
Assertions "once" для Mail та Notification фейків
@talaridisTh додав нові assertions "once" для фейків Mail та Notification, що робить тестовий код більш виразним:
// Раніше
Mail::assertSentTimes(OrderShipped::class, 1);
Mail::assertQueuedTimes(OrderShipped::class, 1);
Notification::assertSentToTimes($user, InvoicePaid::class, 1);
Notification::assertSentOnDemandTimes(InvoicePaid::class, 1);
// Тепер
Mail::assertSentOnce(OrderShipped::class);
Mail::assertQueuedOnce(OrderShipped::class);
Notification::assertSentToOnce($user, InvoicePaid::class);
Notification::assertSentOnDemandOnce(InvoicePaid::class);
Ці скорочені методи роблять тести більш зрозумілими та легкими для читання.
Інші покращення
Версія 13.31.0 також містить численні виправлення помилок та покращення:
- Покращення безпеки аутентифікації при перевірці cookie
- Виправлення TypeError у
userFromRecaller() коли recaller не знаходить користувача
- Підтримка кластера Redis для драйвера черг
- Виправлення витоку пам'яті в HTTP Client
- Виправлення
assertJsonMissingPath() що ігнорувало wildcards
- Кваліфікація стовпця м'якого видалення з псевдонімом таблиці запиту
- Збереження Eloquent на прямому з'єднанні під час міграцій
- Виправлення генерації URL маршрутів за певних обставин
Повний список змін та порівняння версій 13.30.0 та 13.31.0 доступний на GitHub у changelog фреймворку.