Топ-100
Создать акаунт
NULLTOP » Новости » Laravel 10.3.3

Laravel 10.3.3

09 мар 2024, 14:42
Новости / CMS
14
0
Laravel 10.3.3

В феврале 2023 года вышел новый релиз одного из главных фреймворков в PHP — Laravel 10. Рассказываем, как перейти на новую версию и какие главные изменения в ней произошли.

Laravel 10.3.3 

Как установить Laravel 10

Установить новую версию фреймворка можно с помощью официального установщика Laravel:

laravel new test-app

Также это можно сделать через пакетный менеджер Composer:


composer create-project --prefer-dist laravel/laravel test-app

Чтобы подготовиться к обновлению и автоматизировать процесс, ознакомьтесь с руководством по обновлению до Laravel 10.

Laravel 10: что нового

Laravel Pennant: флаги функций

С помощью пакета Laravel Pennant в проект Laravel 10 теперь можно добавлять фиче-тогглер.

composer require laravel/pennant

Фиче-тогглер позволяет включать и отключать функции во время выполнения кода без внесения изменений. Это может пригодиться, если доступ к функции предоставляется ограниченному числу пользователей, например, при A/B-тестировании или при постепенном добавлении возможностей, когда мы не можем сразу ее включить.


use Laravel\Pennant\Feature;

use Illuminate\Support\Lottery;


Feature::define('new-onboarding-flow', function () {

return Lottery::odds(1, 10);

});


Проверяем, доступна ли функция пользователю:


if (Feature::active('new-onboarding-flow')) {

//

}

Также доступна директива Blade:


@feature('new-onboarding-flow')

...

@endfeature

Узнать о Laravel Pennant подробнее можно в официальной документации и пошаговой инструкции Laravel News.


Управление внешними процессами

Простой и универсальный интерфейс для работы с компонентом Symfony Process позволяет запускать внешние процессы в приложении Laravel.

Команды для запуска процессов:

use Illuminate\Support\Facades\Process;


$result = Process::run('ls -la');


return $result->output();

Одновременно можно запускать несколько процессов.


use Illuminate\Process\Pool;

use Illuminate\Support\Facades\Pool;


[$first, $second, $third] = Process::concurrently(function (Pool $pool) {

$pool->command('cat first.txt');

$pool->command('cat second.txt');

$pool->command('cat third.txt');

});


return $first->output();

Узнайте о процессах подробнее в официальной документации. Смотрите также пулл-реквест на GitHub: [10.x] Process DX Layer.


Выявление медленных тестов

В новой версии Laravel команда php artisan test получила опцию --profile, с помощью которой можно выявлять медленные тесты. Она доступна в седьмой версии пакета nunomaduro/collision. При переходе с Laravel 9 на Laravel 10 обновите версию пакета при апгрейде.


Использование вызываемых правил валидации по умолчанию

В Laravel 9 пользователи создавали вызываемые правила валидации с помощью флага --invokable в команде php artisan make:rule. В новой версии этого делать не нужно.

php artisan make:rule Uppercase

Вызываемые правила валидации выглядят так:


namespace App\Rules;


use Illuminate\Contracts\Validation\InvokableRule;


class Uppercase implements InvokableRule

{

/**

* Run the validation rule.

*

* @param string $attribute

* @param mixed $value

* @param Closure(string): Illuminate\Translation\PotentiallyTranslatedString $fail

* @return void

*/

public function __invoke($attribute, $value, $fail)

{

if (strtoupper($value) !== $value) {

$fail('The :attribute must be uppercase.');

}

}

}

Смотрите также пулл-реквест на GitHub: [10.x] Make invokable rules default.

Скелет Laravel 10 использует нативные типы вместо DocBlocks

Начиная с десятой версии фреймворк будет использовать при генерации кода нативные типы вместо DocBlocks.

Сгенерированный метод schedule() в app/Console/Kernel.php теперь будет выглядеть выглядеть так:

/**

* Define the application's command schedule.

- *

- * @param Illuminate\Console\Scheduling\Schedule $schedule

- * @return void

*/

- protected function schedule($schedule)

+ protected function schedule(Schedule $schedule): void

Еще разработчики добавили обобщенные аннотации типов, что поможет IDE в автокомплите кода. Смотрите также пулл-реквест на GitHub: [10.x] Uses PHP Native Type Declarations.


В официальных пакетах тоже используются нативные типы

Для использования нативных аннотаций типов в официальных пакетах Laravel не нужно ждать перехода на Laravel 10. Создатель Laravel Тэйлор Отвел сообщил об этом в Твиттере: «В Laravel 10.x мы добавляем в пользовательский код аннотации типов. Это изменение доступно во всех пакетах нашей экосистемы, включая заглушки и стартовые наборы. Мы уже внедряем некоторые из этих изменений в пакеты Breeze и Jetstream».

Ознакомьтесь с пулл-реквестом, который инициирует переход от DocBlocks к нативным аннотациям в Laravel Jetstream.

Путь сохранения файлов конфигурации

Теперь разработчики приложения могут настроить путь сохранения файлов конфигурации. Это удобно, если проект переходит на Laravel постепенно, а структура кода не может быть сразу перенесена.

В файле *bootstrap/app.php используйте метод configPath() для объекта $app.

$app->configPath(__DIR__ . '/../some/path');

Кстати, bootstrapPath(), databasePath(), langPath() и другие подобные функции предлагают широкие возможности для настройки фреймворка. Подробнее можно почитать здесь: [10.x] Config path customization.


Для изменения столбцов в миграциях больше не требуется doctrine/dbal

Для изменения столбцов в миграциях раньше нужно было установить пакет doctrine/dbal. Теперь миграции поддерживают нативные операции большинства баз данных, с которыми работает Laravel.

Допустим, в приложении много связей с базами данных, и уже установлен слой Doctrine DBAL. Чтобы использовать нативные операции, нужно вызвать метод Schema::useNativeSchemaOperationsIfPossible() прежде, чем полагаться на пакет. Например, SQLite пока не поддерживает такую возможность.

use Illuminate\Support\Facades\Schema;


...


class AppServiceProvider extends ServiceProvider

{

public function boot()

{

Schema::useNativeSchemaOperationsIfPossible();

}

}

Подробнее:

  • [10.x] Add support for native column modifying
  • [9.x] Add support for native rename/drop column commands

Какие еще изменения произошли, что устарело или удалено

Для работы Laravel 10 требуется как минимум Composer 2.2

Чтобы у каждого проекта Laravel 10 был надежный фундамент, один из пользователей предложил использовать Composer не ниже версии 2.2, вышедшей в декабре 2021 года. Это последняя версия с долгосрочной поддержкой, обновления для которой будут доступны до конца 2023 года. Актуальная версия — Composer 2.5.3.

Подробнее: [10.x] Requires Composer 2.2

Прекращение поддержки PHP 8.0

Laravel 10 не поддерживает PHP 8.0, поэтому для его использования нужно обновиться до PHP 8.1 или PHP 8.2.

При этом не обязательно сразу обновлять приложения Laravel до самой новой версии. Особенно если от текущей версии зависят проекты, на исправную работу которых рассчитывают пользователи. Переход должен быть постепенным и включать в себя всестороннее тестирование.

Смотрите также пулл-реквест на GitHub: [10.x] Drop PHP 8.0.

Прекращение поддержки Predis v1

Если в проекте используется Predis v1, рекомендуем обновиться до v2. Изменения в Predis v2 отражены в журнале изменений.

Смотрите также пулл-реквест на GitHub: [10.x] Drop Predis v1 support.

Вместо Predis можно использовать быстрое нативное расширение PHP Redis, чтобы ускорить работу сайта с большим трафиком.

Удален метод dispatchNow()

Метод dispatchNow() пользовался популярностью, однако в Laravel 9 был признан устаревшим и заменен на dispatchSync(). В Laravel 10 устаревший метод будет удален, советуем найти и заменить его в своих проектах. Это важное изменение, но адаптироваться к нему легко.

Смотрите также пулл-реквест на GitHub: [10.x] Remove deprecated dispatchNow functionality.

Удалены многие устаревшие методы и свойства

Выпустив новую мажорную версию фреймворка, разработчики Laravel смогли отказаться от функций, которые считались устаревшими еще в девятой версии. Обратите на это внимание и внимательно протестируйте приложения в Laravel, прежде чем переходить на 10-ю версию.


Название:
Laravel 10.3.3
Категория:

Все материалы, представленные на сайте, носят исключительно ознакомительный характер!

Нашли ошибку в тексте на сайте? Помогите нам ее исправить! Выделите ошибку и нажмите одновременно клавиши «Ctrl» и «Enter». Мы узнаем о неточности и как можно скорее исправим )

Если ссылка битая, пожалуйста сообщите нам через форму комментариев или в ЛС

Комментарии
Минимальная длина комментария - 50 знаков. комментарии модерируются
Кликните на изображение чтобы обновить код, если он неразборчив

Смотрите также: