HTML Diff
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>