На этой неделе команда Laravel выпустила версию 11.2, которая включает в себя помощник поддержки fluent(), помощник context(), улучшенную обработку отсутствующей базы данных во время migrate
операции и многое другое.
Fluent Helper
Фило Херманс (Philo Hermans) внес свой вклад в вспомогательную fluent()
функцию при работе с многомерными массивами. Класс Fluent
существует во фреймворке Laravel уже довольно давно, однако этот PR вводит вспомогательный удобный метод для создания экземпляра текучего объекта:
$data = [
'user' => [
'name' => 'Philo',
'address' => [
'city' => 'Amsterdam',
'country' => 'Netherlands',
]
],
'posts' => [
[
'title' => 'Post 1',
],
[
'title' => 'Post 2',
]
]
];
collect($data)->get('user');
fluent($data)->user;
collect($data)->get('user')['name'];
fluent($data)->get('user.name');
collect(collect($data)->get('posts'))->pluck('title');
fluent($data)->collect('posts')->pluck('title');
json_encode(collect($data)->get('user')['address']);
fluent($data)->scope('user.address')->toJson();
Помощник по контекстуМайкл Набиль (Michael Nabil
) создал вспомогательную функцию для context()
управления контекстом. В зависимости от переданных аргументов вы можете либо добавить в контекст, либо получить объект контекста, либо получить его (с необязательным пользовательским значением по умолчанию):
// Add user information to the context
context(['user' => auth()->user()]);
// Retrieve the context object
$context = context();
// Retrieve user information from the context
$user = context('user');
// Optional custom default value if not found.
$some_key = context('key_that_does_not_exist', false);
Значение по умолчанию для геттеров контекста Майкл
Набиль (Michael Nabil) внес свой вклад в поддержку значения по умолчанию для геттеров контекста:
// Before: Returns null if not found
Context::get('is_user');
Context::getHidden('is_user');
// After: Returns `false` if not found
Context::get('is_user', false); // false
Context::getHidden('is_user', false); // false
Context::get('is_user'); // null
Методы утверждения тестов цепочки заданийГюнтер Дебраувер (Günther Debrauwer) и assertDoesntHaveChain()
методы:
assertHasChain()
public function test_job_chains_foo_bar_job(): void
{
$job = new TestJob();
$job->handle();
$job->assertHasChain([
new FooBarJob();
]);
// $job->assertDoesntHaveChain();
}
Улучшенная обработка
создания/очистки базы данныхДрис Винтс (Dries Vints) внес свой вклад в улучшенную обработку сбоев базы данных (#50836) при запускеmigrate
, когда база данных еще не создана, а также обновил команду, migrate:fresh
чтобы упростить процесс, когда база данных не существует. #50838:
Если
migrate:fresh
команда вызывается, когда база данных еще не создана, она завершится ошибкой при попытке очистить базу данных. Этот PR исправляет это, сначала проверяя, существует ли таблица миграций, и если нет, немедленно переходите к команде migrate, пропуская команду db:wipe. Это вызовет поток команды migrate, а затем достигнет точки, в которой команда попросит пользователя создать базу данных.В сочетании с #50836 это обеспечит более удобный опыт для людей, пытающихся установить Jetstream через установщик Laravel и решивших не создавать базу данных.
Приведенное выше описание взято из Pull Request #50838.
Обрезка строк удаляет невидимые символы Дасун
Таранга внес свой вклад в обновление промежуточного ПО фреймворкаTrimStrings
, в котором невидимые символы не обрезаются во время HTTP-запроса, что может вызвать проблемы при отправке форм. Подробнее см. в Pull Request #50832.
Заметки о
выпуске Полный список новых функций и обновлений можно увидеть ниже, а также различия между версиями 11.1.0 и 11.2.0 на GitHub. Следующие примечания к выпуску взяты непосредственно из журнала изменений:
Версия 11.2.0
- [11.х] Исправлено: обновление
[@param](https://github.com/param)
в некоторых блоках документации по @saMahmoudzadeh в https://github.com/laravel/framework/pull/50827 - [11.х] Исправлено: обновление @return в некоторых блоках документации на @saMahmoudzadeh в https://github.com/laravel/framework/pull/50826
- [11.х] Исправление извлечения сгенерированных столбцов в устаревшей версии PostgreSQL путем @hafezdivandari в https://github.com/laravel/framework/pull/50834
- [11.х] Обрезка невидимых символов по @dasundev в https://github.com/laravel/framework/pull/50832
- [11.х] Добавьте значение по умолчанию for
get
иgetHidden
onContext
по @michaelnabil230 в https://github.com/laravel/framework/pull/50824 - [11.х] Улучшено
serve
управление ремесленником на @nunomaduro в https://github.com/laravel/framework/pull/50821 - [11.х] Перефразируйте пароли пользователей при входе в систему один раз, @axlon в https://github.com/laravel/framework/pull/50843
- [11.х] Не стирайте базу данных, если она не существует @driesvints в https://github.com/laravel/framework/pull/50838
- [11.х] Улучшенная обработка сбоев при создании базы данных за счет @driesvints в https://github.com/laravel/framework/pull/50836
- [11.х] Использование имени схемы по умолчанию в SQL Server , @hafezdivandari в https://github.com/laravel/framework/pull/50855
- Правильная типизация определений столбцов базы данных startedAs и virtualAs с помощью @ollieread в https://github.com/laravel/framework/pull/50851
- Разрешить передачу выражения запроса в качестве столбца в отношении "многие-ко-многим" по @plumthedev в https://github.com/laravel/framework/pull/50849
- [11.х] Исправление
Middleware::trustHosts(subdomains: true)
@axlon в https://github.com/laravel/framework/pull/50877 - [11.х] Измените блоки doc для getGateArguments, @saMahmoudzadeh в https://github.com/laravel/framework/pull/50874
- [11.х] Добавить
[@throws](https://github.com/throws)
в блок doc для метода resolve с помощью @saMahmoudzadeh в https://github.com/laravel/framework/pull/50873 - [11.х] Методы обрезки str по @patrickomeara в https://github.com/laravel/framework/pull/50822
- [11.х] Добавление беглого помощника с помощью @PhiloNL в https://github.com/laravel/framework/pull/50848
- [11.х] Добавьте новый помощник для контекста , @michaelnabil230 в https://github.com/laravel/framework/pull/50878
- [11.х]
assertChain
иassertNoChain
на экземпляре задания @gdebrauwer в https://github.com/laravel/framework/pull/50858 - [11.х] Удалите избыточный
getDefaultNamespace
метод в некоторых классах (команды class, interface и trait), @saMahmoudzadeh в https://github.com/laravel/framework/pull/50880 - [11.х] Удалите избыточную реализацию ConnectorInterface в MariaDbConnector, @saMahmoudzadeh в https://github.com/laravel/framework/pull/50881
- [11.Х] Исправлено: ошибка при использовании
orderByRaw
in query перед использованиемcursorPaginate
by @ngunyimacharia в https://github.com/laravel/framework/pull/50887