0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p><strong>В феврале 2023 года вышел новый релиз одного из главных фреймворков в PHP - Laravel 10. Рассказываем, как перейти на новую версию и какие главные изменения в ней произошли.</strong></p>
1
<p><strong>В феврале 2023 года вышел новый релиз одного из главных фреймворков в PHP - Laravel 10. Рассказываем, как перейти на новую версию и какие главные изменения в ней произошли.</strong></p>
2
<h2>Содержание</h2>
2
<h2>Содержание</h2>
3
<ul><li><a>Как установить Laravel 10</a></li>
3
<ul><li><a>Как установить Laravel 10</a></li>
4
<li><a>Laravel 10: что нового</a></li>
4
<li><a>Laravel 10: что нового</a></li>
5
<li><a>Какие еще изменения произошли, что устарело или удалено</a></li>
5
<li><a>Какие еще изменения произошли, что устарело или удалено</a></li>
6
<li><a>Как поучаствовать в разработке Laravel 10</a></li>
6
<li><a>Как поучаствовать в разработке Laravel 10</a></li>
7
</ul><h2>Как установить Laravel 10</h2>
7
</ul><h2>Как установить Laravel 10</h2>
8
<p>Установить новую версию фреймворка можно с помощью официального<a>установщика Laravel</a>:</p>
8
<p>Установить новую версию фреймворка можно с помощью официального<a>установщика Laravel</a>:</p>
9
<p>Также это можно сделать через пакетный менеджер Composer:</p>
9
<p>Также это можно сделать через пакетный менеджер Composer:</p>
10
<p>Чтобы подготовиться к обновлению и автоматизировать процесс, ознакомьтесь с<a>руководством</a>по обновлению до Laravel 10.</p>
10
<p>Чтобы подготовиться к обновлению и автоматизировать процесс, ознакомьтесь с<a>руководством</a>по обновлению до Laravel 10.</p>
11
<blockquote><h3>Читайте также:</h3>
11
<blockquote><h3>Читайте также:</h3>
12
<p>Почему Laravel -<a>один из лучших PHP-фреймворков</a>для стартапов и энтерпрайза</p>
12
<p>Почему Laravel -<a>один из лучших PHP-фреймворков</a>для стартапов и энтерпрайза</p>
13
</blockquote><h2>Laravel 10: что нового</h2>
13
</blockquote><h2>Laravel 10: что нового</h2>
14
<h3>Laravel Pennant: флаги функций</h3>
14
<h3>Laravel Pennant: флаги функций</h3>
15
<p>С помощью пакета<a>Laravel Pennant</a> в проект Laravel 10 теперь можно добавлять фиче-тогглер.</p>
15
<p>С помощью пакета<a>Laravel Pennant</a> в проект Laravel 10 теперь можно добавлять фиче-тогглер.</p>
16
<p>Фиче-тогглер позволяет включать и отключать функции во время выполнения кода без внесения изменений. Это может пригодиться, если доступ к функции предоставляется ограниченному числу пользователей, например, при A/B-тестировании или при постепенном добавлении возможностей, когда мы не можем сразу ее включить.</p>
16
<p>Фиче-тогглер позволяет включать и отключать функции во время выполнения кода без внесения изменений. Это может пригодиться, если доступ к функции предоставляется ограниченному числу пользователей, например, при A/B-тестировании или при постепенном добавлении возможностей, когда мы не можем сразу ее включить.</p>
17
<p>Проверяем, доступна ли функция пользователю:</p>
17
<p>Проверяем, доступна ли функция пользователю:</p>
18
<p>Также доступна директива Blade:</p>
18
<p>Также доступна директива Blade:</p>
19
<p>Узнать о Laravel Pennant подробнее можно в <a>официальной документации</a>и<a>пошаговой инструкции</a>Laravel News.</p>
19
<p>Узнать о Laravel Pennant подробнее можно в <a>официальной документации</a>и<a>пошаговой инструкции</a>Laravel News.</p>
20
<h3>Управление внешними процессами</h3>
20
<h3>Управление внешними процессами</h3>
21
<p>Простой и универсальный интерфейс для работы с <a>компонентом Symfony Process</a>позволяет запускать внешние процессы в приложении Laravel.</p>
21
<p>Простой и универсальный интерфейс для работы с <a>компонентом Symfony Process</a>позволяет запускать внешние процессы в приложении Laravel.</p>
22
<p>Команды для запуска процессов:</p>
22
<p>Команды для запуска процессов:</p>
23
<p>Одновременно можно запускать несколько процессов.</p>
23
<p>Одновременно можно запускать несколько процессов.</p>
24
<p>Узнайте о процессах подробнее в<a>официальной документации</a>. Смотрите также пулл-реквест на GitHub: <a>[10.x] Process DX Layer</a>.</p>
24
<p>Узнайте о процессах подробнее в<a>официальной документации</a>. Смотрите также пулл-реквест на GitHub: <a>[10.x] Process DX Layer</a>.</p>
25
<h3>Выявление медленных тестов</h3>
25
<h3>Выявление медленных тестов</h3>
26
<p>В новой версии Laravel команда php artisan test получила опцию --profile, с помощью которой можно выявлять медленные тесты. Она доступна в седьмой версии пакета nunomaduro/collision. При переходе с Laravel 9 на Laravel 10 обновите версию пакета при апгрейде.</p>
26
<p>В новой версии Laravel команда php artisan test получила опцию --profile, с помощью которой можно выявлять медленные тесты. Она доступна в седьмой версии пакета nunomaduro/collision. При переходе с Laravel 9 на Laravel 10 обновите версию пакета при апгрейде.</p>
27
<h3>Использование вызываемых правил валидации по умолчанию</h3>
27
<h3>Использование вызываемых правил валидации по умолчанию</h3>
28
<p>В Laravel 9 пользователи создавали <a>вызываемые правила валидации</a> с помощью флага --invokable в команде php artisan make:rule. В новой версии этого делать не нужно.</p>
28
<p>В Laravel 9 пользователи создавали <a>вызываемые правила валидации</a> с помощью флага --invokable в команде php artisan make:rule. В новой версии этого делать не нужно.</p>
29
<p>Вызываемые правила валидации выглядят так:</p>
29
<p>Вызываемые правила валидации выглядят так:</p>
30
<p>Смотрите также пулл-реквест на GitHub: <a>[10.x] Make invokable rules default</a>.</p>
30
<p>Смотрите также пулл-реквест на GitHub: <a>[10.x] Make invokable rules default</a>.</p>
31
<blockquote><h3>Читайте также:</h3>
31
<blockquote><h3>Читайте также:</h3>
32
<p>Язык программирования PHP:<a>рейтинг, сферы применения, прогнозы экспертов</a></p>
32
<p>Язык программирования PHP:<a>рейтинг, сферы применения, прогнозы экспертов</a></p>
33
</blockquote><h3>Скелет Laravel 10 использует нативные типы вместо DocBlocks</h3>
33
</blockquote><h3>Скелет Laravel 10 использует нативные типы вместо DocBlocks</h3>
34
<p>Начиная с десятой версии фреймворк будет использовать при генерации кода нативные типы вместо<a>DocBlocks</a>.</p>
34
<p>Начиная с десятой версии фреймворк будет использовать при генерации кода нативные типы вместо<a>DocBlocks</a>.</p>
35
<p>Сгенерированный метод schedule() в app/Console/Kernel.php теперь будет выглядеть выглядеть так:</p>
35
<p>Сгенерированный метод schedule() в app/Console/Kernel.php теперь будет выглядеть выглядеть так:</p>
36
<p>Еще разработчики добавили обобщенные аннотации типов, что поможет IDE в автокомплите кода. Смотрите также пулл-реквест на GitHub: <a>[10.x] Uses PHP Native Type Declarations 🐘</a>.</p>
36
<p>Еще разработчики добавили обобщенные аннотации типов, что поможет IDE в автокомплите кода. Смотрите также пулл-реквест на GitHub: <a>[10.x] Uses PHP Native Type Declarations 🐘</a>.</p>
37
<h3>В официальных пакетах тоже используются нативные типы</h3>
37
<h3>В официальных пакетах тоже используются нативные типы</h3>
38
<p>Для использования нативных аннотаций типов в официальных пакетах Laravel не нужно ждать перехода на Laravel 10. Создатель Laravel Тэйлор Отвел<a>сообщил</a>об этом в Твиттере: "В Laravel 10.x мы добавляем в пользовательский код аннотации типов. Это изменение доступно во всех пакетах нашей экосистемы, включая заглушки и стартовые наборы. Мы уже внедряем некоторые из этих изменений в пакеты Breeze и Jetstream".</p>
38
<p>Для использования нативных аннотаций типов в официальных пакетах Laravel не нужно ждать перехода на Laravel 10. Создатель Laravel Тэйлор Отвел<a>сообщил</a>об этом в Твиттере: "В Laravel 10.x мы добавляем в пользовательский код аннотации типов. Это изменение доступно во всех пакетах нашей экосистемы, включая заглушки и стартовые наборы. Мы уже внедряем некоторые из этих изменений в пакеты Breeze и Jetstream".</p>
39
<p>Ознакомьтесь с<a>пулл-реквестом</a>, который инициирует переход от DocBlocks к нативным аннотациям в <a>Laravel Jetstream</a>.</p>
39
<p>Ознакомьтесь с<a>пулл-реквестом</a>, который инициирует переход от DocBlocks к нативным аннотациям в <a>Laravel Jetstream</a>.</p>
40
<h3>Путь сохранения файлов конфигурации</h3>
40
<h3>Путь сохранения файлов конфигурации</h3>
41
<p>Теперь разработчики приложения могут настроить путь сохранения файлов конфигурации. Это удобно, если проект переходит на Laravel постепенно, а структура кода не может быть сразу перенесена.</p>
41
<p>Теперь разработчики приложения могут настроить путь сохранения файлов конфигурации. Это удобно, если проект переходит на Laravel постепенно, а структура кода не может быть сразу перенесена.</p>
42
<p>В файле *bootstrap/app.php используйте метод configPath() для объекта $app.</p>
42
<p>В файле *bootstrap/app.php используйте метод configPath() для объекта $app.</p>
43
<p>Кстати, bootstrapPath(), databasePath(), langPath() и другие подобные функции предлагают широкие возможности для настройки фреймворка. Подробнее можно почитать здесь: <a>[10.x] Config path customization</a>.</p>
43
<p>Кстати, bootstrapPath(), databasePath(), langPath() и другие подобные функции предлагают широкие возможности для настройки фреймворка. Подробнее можно почитать здесь: <a>[10.x] Config path customization</a>.</p>
44
<h3>Для изменения столбцов в миграциях больше не требуется doctrine/dbal</h3>
44
<h3>Для изменения столбцов в миграциях больше не требуется doctrine/dbal</h3>
45
<p>Для изменения столбцов в миграциях раньше нужно было установить пакет<a>doctrine/dbal</a>. Теперь миграции поддерживают нативные операции большинства баз данных, с которыми работает Laravel.</p>
45
<p>Для изменения столбцов в миграциях раньше нужно было установить пакет<a>doctrine/dbal</a>. Теперь миграции поддерживают нативные операции большинства баз данных, с которыми работает Laravel.</p>
46
<p>Допустим, в приложении много связей с базами данных, и уже установлен слой Doctrine DBAL. Чтобы использовать нативные операции, нужно вызвать метод Schema::useNativeSchemaOperationsIfPossible() прежде, чем полагаться на пакет. Например, SQLite пока не поддерживает такую возможность.</p>
46
<p>Допустим, в приложении много связей с базами данных, и уже установлен слой Doctrine DBAL. Чтобы использовать нативные операции, нужно вызвать метод Schema::useNativeSchemaOperationsIfPossible() прежде, чем полагаться на пакет. Например, SQLite пока не поддерживает такую возможность.</p>
47
<p>Подробнее:</p>
47
<p>Подробнее:</p>
48
<ul><li><a>[10.x] Add support for native column modifying</a></li>
48
<ul><li><a>[10.x] Add support for native column modifying</a></li>
49
<li><a>[9.x] Add support for native rename/drop column commands</a></li>
49
<li><a>[9.x] Add support for native rename/drop column commands</a></li>
50
</ul><blockquote><h3>Читайте также:</h3>
50
</ul><blockquote><h3>Читайте также:</h3>
51
<p>"Комьюнити у PHP сейчас одно из самых активных":<a>интервью c разработчиком Yii Framework</a>Александром Макаровым</p>
51
<p>"Комьюнити у PHP сейчас одно из самых активных":<a>интервью c разработчиком Yii Framework</a>Александром Макаровым</p>
52
</blockquote><h2>Какие еще изменения произошли, что устарело или удалено</h2>
52
</blockquote><h2>Какие еще изменения произошли, что устарело или удалено</h2>
53
<h3>Для работы Laravel 10 требуется как минимум Composer 2.2</h3>
53
<h3>Для работы Laravel 10 требуется как минимум Composer 2.2</h3>
54
<p>Чтобы у каждого проекта Laravel 10 был надежный фундамент, один из пользователей предложил использовать Composer не ниже версии 2.2, вышедшей в декабре 2021 года. Это последняя версия с долгосрочной поддержкой, обновления для которой будут доступны до конца 2023 года. Актуальная версия - Composer 2.5.3.</p>
54
<p>Чтобы у каждого проекта Laravel 10 был надежный фундамент, один из пользователей предложил использовать Composer не ниже версии 2.2, вышедшей в декабре 2021 года. Это последняя версия с долгосрочной поддержкой, обновления для которой будут доступны до конца 2023 года. Актуальная версия - Composer 2.5.3.</p>
55
<p>Подробнее: <a>[10.x] Requires Composer ^2.2</a></p>
55
<p>Подробнее: <a>[10.x] Requires Composer ^2.2</a></p>
56
<h3>Прекращение поддержки PHP 8.0</h3>
56
<h3>Прекращение поддержки PHP 8.0</h3>
57
<p>Laravel 10 не поддерживает PHP 8.0, поэтому для его использования нужно обновиться до PHP 8.1 или<a>PHP 8.2</a>.</p>
57
<p>Laravel 10 не поддерживает PHP 8.0, поэтому для его использования нужно обновиться до PHP 8.1 или<a>PHP 8.2</a>.</p>
58
<p>При этом не обязательно сразу обновлять приложения Laravel до самой новой версии. Особенно если от текущей версии зависят проекты, на исправную работу которых рассчитывают пользователи. Переход должен быть постепенным и включать в себя всестороннее тестирование.</p>
58
<p>При этом не обязательно сразу обновлять приложения Laravel до самой новой версии. Особенно если от текущей версии зависят проекты, на исправную работу которых рассчитывают пользователи. Переход должен быть постепенным и включать в себя всестороннее тестирование.</p>
59
<p>Смотрите также пулл-реквест на GitHub: <a>[10.x] Drop PHP 8.0</a>.</p>
59
<p>Смотрите также пулл-реквест на GitHub: <a>[10.x] Drop PHP 8.0</a>.</p>
60
<h3>Прекращение поддержки Predis v1</h3>
60
<h3>Прекращение поддержки Predis v1</h3>
61
<p>Если в проекте используется Predis v1, рекомендуем обновиться до v2. Изменения в Predis v2 отражены в <a>журнале изменений</a>.</p>
61
<p>Если в проекте используется Predis v1, рекомендуем обновиться до v2. Изменения в Predis v2 отражены в <a>журнале изменений</a>.</p>
62
<p>Смотрите также пулл-реквест на GitHub: <a>[10.x] Drop Predis v1 support</a>.</p>
62
<p>Смотрите также пулл-реквест на GitHub: <a>[10.x] Drop Predis v1 support</a>.</p>
63
<p>Вместо Predis можно использовать быстрое<a>нативное расширение PHP Redis</a>, чтобы ускорить работу сайта с большим трафиком.</p>
63
<p>Вместо Predis можно использовать быстрое<a>нативное расширение PHP Redis</a>, чтобы ускорить работу сайта с большим трафиком.</p>
64
<h3>Удален метод dispatchNow()</h3>
64
<h3>Удален метод dispatchNow()</h3>
65
<p>Метод dispatchNow() пользовался популярностью, однако в Laravel 9 был признан устаревшим и заменен на <a>dispatchSync()</a>. В Laravel 10 устаревший метод будет удален, советуем найти и заменить его в своих проектах. Это важное изменение, но адаптироваться к нему легко.</p>
65
<p>Метод dispatchNow() пользовался популярностью, однако в Laravel 9 был признан устаревшим и заменен на <a>dispatchSync()</a>. В Laravel 10 устаревший метод будет удален, советуем найти и заменить его в своих проектах. Это важное изменение, но адаптироваться к нему легко.</p>
66
<p>Смотрите также пулл-реквест на GitHub: <a>[10.x] Remove deprecated dispatchNow functionality</a>.</p>
66
<p>Смотрите также пулл-реквест на GitHub: <a>[10.x] Remove deprecated dispatchNow functionality</a>.</p>
67
<h3>Удалены многие устаревшие методы и свойства</h3>
67
<h3>Удалены многие устаревшие методы и свойства</h3>
68
<p>Выпустив новую мажорную версию фреймворка, разработчики Laravel смогли отказаться от функций, которые считались устаревшими еще в девятой версии. Обратите на это внимание и внимательно протестируйте приложения в Laravel, прежде чем переходить на 10-ю версию.</p>
68
<p>Выпустив новую мажорную версию фреймворка, разработчики Laravel смогли отказаться от функций, которые считались устаревшими еще в девятой версии. Обратите на это внимание и внимательно протестируйте приложения в Laravel, прежде чем переходить на 10-ю версию.</p>
69
<p>В этом помогут пулл-реквесты:</p>
69
<p>В этом помогут пулл-реквесты:</p>
70
<ul><li><a>[10.x] Remove deprecated Route::home method</a></li>
70
<ul><li><a>[10.x] Remove deprecated Route::home method</a></li>
71
<li><a>[10.x] Remove deprecated assertTimesSent</a></li>
71
<li><a>[10.x] Remove deprecated assertTimesSent</a></li>
72
<li><a>[10.x] Remove deprecated method</a></li>
72
<li><a>[10.x] Remove deprecated method</a></li>
73
<li><a>[10.x] Remove deprecated dates property</a></li>
73
<li><a>[10.x] Remove deprecated dates property</a></li>
74
<li><a>[10.x] Use native php 8.1 array_is_list function</a></li>
74
<li><a>[10.x] Use native php 8.1 array_is_list function</a></li>
75
<li><a>[10.x] Remove deprecations</a></li>
75
<li><a>[10.x] Remove deprecations</a></li>
76
</ul><h2>Как поучаствовать в разработке Laravel 10</h2>
76
</ul><h2>Как поучаствовать в разработке Laravel 10</h2>
77
<ol><li>Изучите<a>проекты на GitHub</a>.</li>
77
<ol><li>Изучите<a>проекты на GitHub</a>.</li>
78
<li>Ознакомьтесь с пулл-реквестами и узнайте, что уже сделано.</li>
78
<li>Ознакомьтесь с пулл-реквестами и узнайте, что уже сделано.</li>
79
<li>Если вы столкнулись с проблемой при использовании фреймворка, придумайте решение.</li>
79
<li>Если вы столкнулись с проблемой при использовании фреймворка, придумайте решение.</li>
80
<li>Отправьте пулл-реквест в репозиторий<a>laravel/framework</a>, получите обратную связь, внесите изменения - и пулл-реквест будет включен в основной репозиторий.</li>
80
<li>Отправьте пулл-реквест в репозиторий<a>laravel/framework</a>, получите обратную связь, внесите изменения - и пулл-реквест будет включен в основной репозиторий.</li>
81
</ol><p>Чтобы повысить шансы на успех, предложите изменение, которое будет полезно для разработчиков фреймворка, но не будет требовать от них постоянного внимания и дальнейших усилий.</p>
81
</ol><p>Чтобы повысить шансы на успех, предложите изменение, которое будет полезно для разработчиков фреймворка, но не будет требовать от них постоянного внимания и дальнейших усилий.</p>
82
<p>Кстати,<a>Тэйлор Отвел объявил</a> конкурс, в котором предложил пользователям сообщать об ошибках в Laravel 10. Главный приз - $1000.</p>
82
<p>Кстати,<a>Тэйлор Отвел объявил</a> конкурс, в котором предложил пользователям сообщать об ошибках в Laravel 10. Главный приз - $1000.</p>
83
<p>Правила конкурса:</p>
83
<p>Правила конкурса:</p>
84
<ul><li>Учитываются только пулл-реквесты в ветке 10.x репозитория<a>laravel/framework</a></li>
84
<ul><li>Учитываются только пулл-реквесты в ветке 10.x репозитория<a>laravel/framework</a></li>
85
<li>Принимаются только исправления ошибок. Пользователи не могут предлагать новые функции, рефакторинг кода или исправления опечаток</li>
85
<li>Принимаются только исправления ошибок. Пользователи не могут предлагать новые функции, рефакторинг кода или исправления опечаток</li>
86
<li>При исправление ошибки нужно написать тесты</li>
86
<li>При исправление ошибки нужно написать тесты</li>
87
<li>Если исправление ошибки принято, пользователь участвует в конкурсе</li>
87
<li>Если исправление ошибки принято, пользователь участвует в конкурсе</li>
88
<li>После выхода стабильной версии Laravel 10 случайным образом будет выбран победитель, который получит тысячу долларов</li>
88
<li>После выхода стабильной версии Laravel 10 случайным образом будет выбран победитель, который получит тысячу долларов</li>
89
</ul><p>Узнать о конкурсе подробнее можно в официальном блоге Laravel: <a>Laravel 10 Bug Hunt</a>. Если вы чувствуете, что для участия в таких конкурсах вам нужно набраться еще немного знаний и научиться делать пулл-реквесты, можете попробовать свои силы в опенсорс-проектах Хекслета. Подробнее о них можно прочитать<a>в этой статье</a>.</p>
89
</ul><p>Узнать о конкурсе подробнее можно в официальном блоге Laravel: <a>Laravel 10 Bug Hunt</a>. Если вы чувствуете, что для участия в таких конкурсах вам нужно набраться еще немного знаний и научиться делать пулл-реквесты, можете попробовать свои силы в опенсорс-проектах Хекслета. Подробнее о них можно прочитать<a>в этой статье</a>.</p>
90
<p><em>Эта статья - адаптированный перевод<a>материала</a>фулстек-разработчика Бенджамина Крозата, опубликованного в его личном блоге. Мнение редакции Хекслета может не совпадать с мнением автора.</em></p>
90
<p><em>Эта статья - адаптированный перевод<a>материала</a>фулстек-разработчика Бенджамина Крозата, опубликованного в его личном блоге. Мнение редакции Хекслета может не совпадать с мнением автора.</em></p>
91
<blockquote><h3>Изучите Laravel на Хекслете</h3>
91
<blockquote><h3>Изучите Laravel на Хекслете</h3>
92
<p>Пройдите наш курс "<a>PHP: Разработка на Laravel</a>", чтобы еще подробнее познакомиться с веб-фреймворком и научиться быстро разрабатывать сайты на Laravel.</p>
92
<p>Пройдите наш курс "<a>PHP: Разработка на Laravel</a>", чтобы еще подробнее познакомиться с веб-фреймворком и научиться быстро разрабатывать сайты на Laravel.</p>
93
</blockquote>
93
</blockquote>