Цього тижня команда Laravel випустила версію v11.39, до якої додано атрибут класу фабрики моделей, можливість запобігти руйнівним відкатам, параметри повторних спроб і затримки для PhpRedis та багато іншого.
# Введення атрибута UseFactory
Чриз Артер додав атрибут UseFactory для визначення, яку фабрику слід використовувати для моделі. Це зручно для реєстрації фабрики для моделей поза звичайним простором імен App\Models:
namespace App\SomeFeatureDomain\Models\Comment;
use Database\Factories\CommentFactory;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Attributes\UseFactory;
#[UseFactory(CommentFactory::class)]
class Comment extends Model
{
use HasFactory;
// ...
}
Ще один спосіб перевизначити фабричну конвенцію — це визначити метод newFactory(), який матиме вищий пріоритет над атрибутом UseFactory(), якщо ви обидва визначите:
use Database\Factories\CommentFactory;
/**
* Створити новий екземпляр фабрики для моделі.
*/
protected static function newFactory()
{
return CommentFactory::new();
}
Згідно з описом запиту на злиття, пріоритет вирішення фабрики такий:
- Статична властивість
$factory, якщо визначена - Атрибут UseFactory, якщо присутній
- Вирішення фабрики на основі конвенцій
Деталі про те, як завантажуються фабрики, можна знайти в документації про Конвенції виявлення моделей і фабрик.
# Додати опцію звітності/логування у файлову систему
Савіо Резенде додав опції throw і report в драйвер файлової системи. Якщо обидва параметри встановлені в true, це означає, що диск не викидатиме винятків і звітуватиме про помилки:
'disks' => [
'local' => [
'driver' => 'local',
'root' => storage_path('app'),
'throw' => false, // Приховати винятки
'report' => true, // Увімкнути логування помилок
],
],
Деталі про роботу цих опцій можна знайти в Запиті на злиття #54212.
# Запобігання руйнівних відкатів
Райнер Бендіг додав можливість запобігати руйнівним операціям RollbackCommand, якщо додаток настроєний для заборони руйнівних команд з:
DB::prohibitDestructiveCommands(true);
# Додати шлях до завантажувача перекладів
Селчук Чукур додав метод addPath() для додавання директорії до завантажувача перекладів:
Раніше було неможливо додати нову директорію без простору імен для завантажувача перекладів. Цей метод дозволяє завантажувати рядки перекладів, включаючи нову директорію без простору імен.
Деталі можна знайти в Запиті на злиття #54277.
# Додати підтримку параметрів phpredis для затримки та максимальної повторної спроби
Петро Левтонов додав параметри конфігурації для затримки та повторної спроби у з'єднанні phpredis:
Цей запит на злиття додає підтримку конфігурацій ~phpredis backoff/retry~.
Ці налаштування є критично важливими для високопродуктивних додатків. Наразі я змушений переписувати драйвер у багатьох сервісах, щоб скористатися цими конфігураціями. Було б чудово, якби ви це об'єднали, щоб підтримувати ці конфігурації з коробки.
Я підтвердив з утримувачем phpredis, що ці налаштування наразі доступні лише для звичайного класу Redis, а не для RedisCluster, тому я їх не додав до налаштувань кластера.
Для довідки, у розділі PhpRedis документації Laravel наведені ці нові опції.
# Примітки до випуску
Повний список нових функцій та оновлень дивіться нижче та порівняйте зміни між 11.38.0 і 11.39.0 на GitHub. Наступні примітки до випуску взято з змінної документації:
# v11.38.0
- [11.x] Замінено дублікати функцій
ValidatedInputнаInteractsWithDatatrait від @stevebauman у https://github.com/laravel/framework/pull/54208 - [11.x] Покращення персоналізованих повідомлень про помилки в правилі валідації
Emailвід @SanderMuller у https://github.com/laravel/framework/pull/54202 - [11.x] Виправлено попередження про знецінення у
optimize:clearтаoptimizeвід @cosmastech у https://github.com/laravel/framework/pull/54197 - [11.x] Додано підтримку параметрів затримки та максимальної повторної спроби phpredis від @TheLevti у https://github.com/laravel/framework/pull/54191
- Введено атрибут UseFactory від @christopherarter у https://github.com/laravel/framework/pull/54065
- [11.x] Встановлено клас-рядок на
UseFactoryвід @cosmastech у https://github.com/laravel/framework/pull/54215 - [11.x] Зміна LazyCollection::make() на новий LazyCollection() від @AhmedAlaa4611 у https://github.com/laravel/framework/pull/54216
- Підтримка стильових імен файлів хешів з рядками запитів у маніфесті від @newapx у https://github.com/laravel/framework/pull/54219
- [11.x] Усталенювання тестів
Rule::email()від @SanderMuller у https://github.com/laravel/framework/pull/54226 - [11.x] Виправлення розбіжностей закінчень рядків у
CliDumperTest::testArrayіCliDumperTest::testObjectвід @AhmedAlaa4611 у https://github.com/laravel/framework/pull/54222 - Додано опцію звітності/логування для виключень файлової системи без викидання від @lotharthesavior у https://github.com/laravel/framework/pull/54212
- [11.x] Виправлено компонент Cache, щоб усвідомлювати налаштування серіалізації та стиснення phpredis від @TheLevti у https://github.com/laravel/framework/pull/54221
- [11.x] Виправлення: Змушення драйвера сесії DB завжди використовувати з'єднання запису від @mathiasgrimm у https://github.com/laravel/framework/pull/54231
- [11.x] Виправлення розбіжностей закінчень рядків у
BladeComponentTagCompilerTestпідIlluminate\Tests\View\Bladeвід @AhmedAlaa4611 у https://github.com/laravel/framework/pull/54233 - [11.x] Виправлення: Завдання не записується в таблиці failed_jobs, якщо тайм-аут відбувається в межах транзакції бази даних, від @decaylala у https://github.com/laravel/framework/pull/54173
- [11.x] Виправлення: Унікальний блокування завдання не знімається за винятком, якщо модель не знайдена, блокування застряє, від @zackAJ у https://github.com/laravel/framework/pull/54000
- [11.x] Виправлення розбіжностей закінчень рядків на тесті Windows від @AhmedAlaa4611 у https://github.com/laravel/framework/pull/54236
- Додано підтримку в DB::prohibitDestructiveCommands для запобігання руйнівним відкатам… від @hexathos у https://github.com/laravel/framework/pull/54238
- [11.x] Додати підтримку applyAfterQueryCallbacks для не-мутаторних випадків у методі pluck від @batinmustu у https://github.com/laravel/framework/pull/54268
- [11.x]
addPath()Дозволити додавання нового шляху для завантажувача перекладів від @selcukcukur у https://github.com/laravel/framework/pull/54277