You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
@@ -28,7 +28,7 @@ Laravel и другие его собственные пакеты следую
28
28
| 9 ¹ | 8.0 - 8.2 | 8 февраля 2022 | 8 августа 2023 | 6 февраля 2024 |
29
29
| 10 ² | 8.1 - 8.3 | 14 февраля 2023 | 6 августа 2024 | 4 февраля 2025 |
30
30
| 11 | 8.2 - 8.4 | 12 марта 2024 | 3 сентября 2025 | 12 марта 2026 |
31
-
| 12 | 8.2 - 8.4 |Q1 2025 | Q3 2026 | Q1 2027 |
31
+
| 12 | 8.2 - 8.4 |24 февраля 2025 | 13 августа 2026 | 24 февраля 2027|
32
32
33
33
</div>
34
34
@@ -45,331 +45,30 @@ Laravel и другие его собственные пакеты следую
45
45
46
46
(*) Поддерживаемые версии PHP
47
47
48
-
<aname="laravel-11"></a>
49
-
## Laravel 11
48
+
<aname="laravel-12"></a>
49
+
## Laravel 12
50
50
51
-
Laravel 11 продолжает улучшения, сделанные в Laravel 10.x, представляя оптимизированную структуру приложения, ограничение скорости в секунду, маршрутизацию работоспособности, плавную ротацию ключей шифрования, улучшения тестирования очередей, почтовый транспорт [Resend](https://resend.com), интеграция валидатора Prompt, новые команды Artisan и многое другое. Кроме того, был представлен Laravel Reverb, собственный масштабируемый сервер WebSocket, обеспечивающий надежные возможности работы в реальном времени для ваших приложений.
51
+
Laravel 12 продолжает улучшения, внесённые в Laravel 11.x, обновляя зависимости и представляя новые стартовые комплекты для React, Vue и Livewire. Теперь доступна возможность использования [WorkOS AuthKit](https://authkit.com) для аутентификации пользователей. Вариант стартового комплекта с WorkOS предоставляет поддержку социальной аутентификации, Passkeys и единого входа (SSO).
52
52
53
-
<aname="php-8"></a>
54
-
### PHP 8.2
53
+
<aname="minimal-breaking-changes"></a>
54
+
### Минимальные критические изменения
55
55
56
-
Для Laravel 11.x требуется минимальная версия PHP 8.2.
56
+
В этом выпуске основное внимание уделялось минимизации критических изменений. Вместо этого команда Laravel сосредоточилась на непрерывном улучшении пользовательского опыта в течение года без нарушения работоспособности существующих приложений.
57
57
58
-
<aname="structure"></a>
59
-
### Оптимизированная структура приложения
58
+
Поэтому Laravel 12 — это, по сути, «обслуживающий релиз», основной целью которого является обновление зависимостей. Большинство приложений Laravel могут быть обновлены до версии 12 без внесения изменений в код.
60
59
61
-
_Оптимизированная структура приложения Laravel была разработана [Тейлором Отвеллом (Taylor Otwell)](https://github.com/taylorotwell) и [Нуно Мадуро (Nuno Maduro)](https://github.com/nunomaduro)_.
60
+
<aname="new-application-starter-kits"></a>
61
+
### Новые стартовые комплекты приложений
62
62
63
-
Laravel 11 представляет упрощенную структуру приложений для **новых** приложений Laravel, не требующую внесения каких-либо изменений в существующие приложения. Новая структура приложения призвана обеспечить более компактный и современный интерфейс, сохраняя при этом многие концепции, с которыми разработчики Laravel уже знакомы. Ниже мы обсудим основные моменты новой структуры приложения Laravel.
63
+
Laravel 12 представляет новые [стартовые комплекты](/docs/{{version}}/starter-kits) для React, Vue и Livewire.
64
64
65
-
#### Файл начальной загрузки приложения
65
+
- Стартовые комплекты React и Vue используют Inertia 2, TypeScript, [shadcn/ui](https://ui.shadcn.com) и Tailwind.
66
+
- Стартовые комплекты Livewire используют библиотеку компонентов [Flux UI](https://fluxui.dev) на основе Tailwind и Laravel Volt.
66
67
67
-
Файл `bootstrap/app.php` был обновлен как файл конфигурации приложения, ориентированный на код. Из этого файла вы теперь можете настроить маршрутизацию вашего приложения, посредников (middleware), поставщиков услуг, обработку исключений и многое другое. Этот файл объединяет различные высокоуровневые настройки поведения приложения, которые ранее были разбросаны по файловой структуре вашего приложения:
68
+
Все эти стартовые комплекты включают встроенную систему аутентификации Laravel, предоставляя функции входа, регистрации, сброса пароля, верификации email и многое другое.
Кроме того, теперь доступен вариант стартового комплекта с [WorkOS AuthKit](https://authkit.com), который поддерживает социальную аутентификацию, Passkeys и SSO. WorkOS предоставляет бесплатную аутентификацию для приложений с аудиторией до 1 миллиона активных пользователей в месяц.
83
71
84
-
<aname="service-providers"></a>
85
-
#### Поставщики услуг
72
+
С выходом новых стартовых комплектов Laravel Breeze и Laravel Jetstream больше не будут получать обновления.
86
73
87
-
Вместо структуры приложения Laravel по умолчанию, содержащей пять поставщиков услуг, Laravel 11 включает только один `AppServiceProvider`. Функциональность предыдущих поставщиков услуг была включена в `bootstrap/app.php`, автоматически обрабатывается платформой или может быть помещена в `AppServiceProvider` вашего приложения.
88
-
89
-
Например, обнаружение событий теперь включено по умолчанию, что в значительной степени устраняет необходимость ручной регистрации событий и их прослушивателей. Однако если вам необходимо зарегистрировать события вручную, вы можете просто сделать это в `AppServiceProvider`. Аналогично, привязки модели маршрута или шлюзы авторизации, которые вы, возможно, ранее зарегистрировали в `AuthServiceProvider`, также могут быть зарегистрированы в `AppServiceProvider`.
90
-
91
-
<aname="opt-in-routing"></a>
92
-
#### Согласование API и широковещательная маршрутизация
93
-
94
-
Файлы маршрутов `api.php` и `channels.php` больше не присутствуют по умолчанию, поскольку многим приложениям эти файлы не требуются. Вместо этого их можно создать с помощью простых команд Artisan:
95
-
96
-
```shell
97
-
php artisan install:api
98
-
99
-
php artisan install:broadcasting
100
-
```
101
-
102
-
<aname="middleware"></a>
103
-
#### Посредники (Middleware)
104
-
105
-
Ранее новые приложения Laravel включали девять посредников. Эти посредники выполняли различные задачи, такие как аутентификация запросов, обрезка входных строк и проверка токенов CSRF.
106
-
107
-
В Laravel 11 эти постредники были перенесены в сам фреймворк, чтобы оно не увеличивало объем структуры вашего приложения. В инфраструктуру добавлены новые методы для настройки поведения этих посредников, которые можно вызывать из файла `bootstrap/app.php` вашего приложения:
Поскольку все промежуточное программное обеспечение можно легко настроить с помощью файла `bootstrap/app.php` вашего приложения, необходимость в отдельном классе "kernel" HTTP была устранена.
122
-
123
-
<aname="scheduling"></a>
124
-
#### Планирование (Scheduling)
125
-
126
-
Используя новый фасад `Schedule`, запланированные задачи теперь могут быть определены непосредственно в файле `routes/console.php` вашего приложения, что устраняет необходимость в отдельном классе "kernel" консоли:
127
-
128
-
```php
129
-
use Illuminate\Support\Facades\Schedule;
130
-
131
-
Schedule::command('emails:send')->daily();
132
-
```
133
-
134
-
<aname="exception-handling"></a>
135
-
#### Обработка исключений
136
-
137
-
Как маршрутизация и посредники, обработка исключений теперь может быть настроена из файла `bootstrap/app.php` вашего приложения вместо отдельного класса обработчика исключений, что сокращает общее количество файлов, включенных в новое приложение Laravel:
Базовый контроллер, включенный в новые приложения Laravel, был упрощен. Он больше не расширяет внутренний класс `Controller` Laravel, а трейты `AuthorizesRequests` и `ValidatesRequests` были удалены, поскольку при желании они могут быть включены в отдельные контроллеры вашего приложения:
153
-
154
-
<?php
155
-
156
-
namespace App\Http\Controllers;
157
-
158
-
abstract class Controller
159
-
{
160
-
//
161
-
}
162
-
163
-
<aname="application-defaults"></a>
164
-
#### Настройки приложения по умолчанию
165
-
166
-
По умолчанию новые приложения Laravel используют SQLite для хранения базы данных, а также драйвер `database` для сеанса, кэша и очереди Laravel. Это позволяет вам приступить к разработке сразу после создания нового приложения Laravel, без необходимости устанавливать дополнительное программное обеспечение или создавать дополнительные миграции базы данных.
167
-
168
-
Кроме того, со временем драйверы `database` для этих сервисов Laravel стали достаточно надежными для производственного использования во многих контекстах приложений; поэтому они представляют собой разумный и унифицированный выбор как для локального, так и для производственного применения.
169
-
170
-
<aname="reverb"></a>
171
-
### Laravel Reverb
172
-
173
-
_Laravel Reverb был разработан [Джо Диксоном (Joe Dixon)](https://github.com/joedixon)_
174
-
175
-
[Laravel Reverb](https://reverb.laravel.com) обеспечивает невероятно быструю и масштабируемую связь через WebSocket в реальном времени непосредственно в вашем приложении Laravel и обеспечивает плавную интеграцию с существующим набором инструментов трансляции событий Laravel, такими как Laravel Echo.
176
-
177
-
```shell
178
-
php artisan reverb:start
179
-
```
180
-
181
-
Кроме того, Reverb поддерживает горизонтальное масштабирование с помощью возможностей публикации/подписки Redis, что позволяет вам распределять трафик WebSocket между несколькими внутренними серверами Reverb, поддерживающими одно востребованное приложение.
182
-
183
-
Для получения дополнительной информации о Laravel Reverb обратитесь к полной [документации по Reverb](/docs/{{version}}/reverb).
184
-
185
-
<aname="rate-limiting"></a>
186
-
### Ограничение посекундной скорости
187
-
188
-
_Посекундное ограничение скорости было предоставлено [Тимом Макдональдом (Tim MacDonald)](https://github.com/timacdonald)_.
189
-
190
-
Laravel теперь поддерживает "посекундное" ограничение скорости для всех ограничителей скорости, включая ограничения для HTTP-запросов и заданий в очереди. Раньше ограничители скорости Laravel были ограничены поминутной детализацией:
191
-
192
-
```php
193
-
RateLimiter::for('invoices', function (Request $request) {
194
-
return Limit::perSecond(1);
195
-
});
196
-
```
197
-
198
-
Для получения дополнительной информации об ограничении скорости в Laravel ознакомьтесь с [документацией по ограничению скорости](/docs/{{version}}/routing#rate-limiting).
Новые приложения Laravel 11 включают директиву маршрутизации `health`, которая инструктирует Laravel определить простую конечную точку проверки работоспособности, которая может быть вызвана сторонними службами мониторинга работоспособности приложений или системами оркестрации, такими как Kubernetes. По умолчанию этот маршрут обслуживается по адресу `/up`:
206
-
207
-
```php
208
-
->withRouting(
209
-
web: __DIR__.'/../routes/web.php',
210
-
commands: __DIR__.'/../routes/console.php',
211
-
health: '/up',
212
-
)
213
-
```
214
-
215
-
Когда HTTP-запросы отправляются по этому маршруту, Laravel также отправляет событие `DiagnosingHealth`, позволяющее вам выполнять дополнительные проверки работоспособности, имеющие отношение к вашему приложению.
Поскольку Laravel шифрует все файлы cookie, включая файлы cookie сеанса вашего приложения, по сути, каждый запрос к приложению Laravel основан на шифровании. Однако из-за этого смена ключа шифрования вашего приложения приведет к выходу всех пользователей из вашего приложения. Кроме того, расшифровка данных, зашифрованных предыдущим ключом шифрования, становится невозможной.
223
-
224
-
Laravel 11 позволяет вам определять предыдущие ключи шифрования вашего приложения в виде списка, разделенного запятыми, через переменную среды `APP_PREVIOUS_KEYS`.
225
-
226
-
При шифровании значений Laravel всегда будет использовать «текущий» ключ шифрования, который находится в переменной среды `APP_KEY`. При расшифровке значений Laravel сначала попытается использовать текущий ключ. Если расшифровка с использованием текущего ключа не удалась, Laravel попытается использовать все предыдущие ключи, пока один из ключей не сможет расшифровать значение.
227
-
228
-
Такой подход к корректному дешифрованию позволяет пользователям продолжать использовать ваше приложение непрерывно, даже если ваш ключ шифрования будет заменен.
229
-
230
-
Дополнительную информацию о шифровании в Laravel можно найти в [документации по шифрованию](/docs/{{version}}/encryption).
231
-
232
-
<aname="automatic-password-rehashing"></a>
233
-
### Автоматическое изменение (rehashing) пароля
234
-
235
-
_Автоматическое изменение (rehashing) пароля было предоставлено [Стивеном Рис-Картером (Stephen Rees-Carter)](https://github.com/valorin)_.
236
-
237
-
Алгоритм хеширования паролей в Laravel по умолчанию — bcrypt. «Рабочий коэффициент» для хешей bcrypt можно настроить с помощью файла конфигурации `config/hashing.php` или переменной среды `BCRYPT_ROUNDS`.
238
-
239
-
Обычно рабочий коэффициент bcrypt следует увеличивать с течением времени по мере увеличения вычислительной мощности процессора/графического процессора. Если вы увеличите рабочий коэффициент bcrypt для своего приложения, Laravel теперь будет корректно и автоматически перехешировать пароли пользователей, когда пользователи проходят аутентификацию в вашем приложении.
240
-
241
-
<aname="prompt-validation"></a>
242
-
### Валидатор Prompt
243
-
244
-
_Интеграцию валидатора Prompt предоставил [Андреа Марко Сартори (Andrea Marco Sartori)](https://github.com/cerbero90)_.
245
-
246
-
[Laravel Prompts](/docs/{{version}}/prompts) — это пакет PHP для добавления красивых и удобных форм в ваши приложения командной строки с функциями браузера, включая текст-заполнитель и проверку.
247
-
248
-
Laravel Prompts поддерживает проверку ввода через замыкания:
249
-
250
-
```php
251
-
$name = text(
252
-
label: 'Как вас зовут?',
253
-
validate: fn (string $value) => match (true) {
254
-
strlen($value) < 3 => 'Имя должно состоять минимум из 3 символов.',
255
-
strlen($value) > 255 => 'Имя не должно превышать 255 символов.',
256
-
default => null
257
-
}
258
-
);
259
-
```
260
-
261
-
Однако это может стать затруднительным при работе со многими входными данными или сложными сценариями проверки. Таким образом, в Laravel 11 вы можете использовать всю мощь [валидатора](/docs/{{version}}/validation) Laravel при проверке ввода подсказки:
262
-
263
-
```php
264
-
$name = text('Как вас зовут?', validate: [
265
-
'name' => 'required|min:3|max:255',
266
-
]);
267
-
```
268
-
269
-
<aname="queue-interaction-testing"></a>
270
-
### Тестирование взаимодействия с очередью
271
-
272
-
_Тестирование взаимодействия с очередью было предоставлено [Тейлор Отвелл (Taylor Otwell)](https://github.com/taylorotwell)_.
273
-
274
-
Раньше попытка проверить, было ли задание в очереди выпущено, удалено или завершилось сбоем вручную, было обременительным и требовало определения пользовательских подделок и заглушек очереди. Однако в Laravel 11 вы можете легко протестировать эти взаимодействия с очередью, используя метод `withFakeQueueInteractions`:
275
-
276
-
```php
277
-
use App\Jobs\ProcessPodcast;
278
-
279
-
$job = (new ProcessPodcast)->withFakeQueueInteractions();
280
-
281
-
$job->handle();
282
-
283
-
$job->assertReleased(delay: 30);
284
-
```
285
-
286
-
Дополнительную информацию о тестировании заданий в очереди см. в [документации по очереди](/docs/{{version}}/queues#testing).
287
-
288
-
<aname="new-artisan-commands"></a>
289
-
### Новые команды Artisan
290
-
291
-
_Команды Artisan для создания классов были предоставлены [Тейлор Отвелл (Taylor Otwell)](https://github.com/taylorotwell)_.
292
-
293
-
Были добавлены новые команды Artisan, позволяющие быстро создавать классы, перечисления, интерфейсы и особенности:
294
-
295
-
```shell
296
-
php artisan make:class
297
-
php artisan make:enum
298
-
php artisan make:interface
299
-
php artisan make:trait
300
-
```
301
-
302
-
<aname="model-cast-improvements"></a>
303
-
### Улучшения приведения моделей
304
-
305
-
_Улучшения приведения моделей были внесены [Нуно Мадуро (Nuno Maduro)](https://github.com/nunomaduro)_.
306
-
307
-
Laravel 11 поддерживает определение приведения модели с использованием метода, а не свойства. Это позволяет упростить и плавно определить приведение типов, особенно при использовании приведения с аргументами:
Для получения дополнительной информации о приведении атрибутов ознакомьтесь с [документацией Eloquent](/docs/{{version}}/eloquent-mutators#attribute-casting).
325
-
326
-
<aname="the-once-function"></a>
327
-
### Функция `once`
328
-
329
-
_Помощник `once` был предоставлен [Тейлор Отвелл (Taylor Otwell)](https://github.com/taylorotwell)_ и _[Нуно Мадуро (Nuno Maduro)](https://github.com/nunomaduro)_.
330
-
331
-
Вспомогательная функция `once` выполняет заданный обратный вызов и кэширует результат в памяти на время выполнения запроса. Любые последующие вызовы функции `once` с тем же обратным вызовом будут возвращать ранее кэшированный результат:
332
-
333
-
function random(): int
334
-
{
335
-
return once(function () {
336
-
return random_int(1, 1000);
337
-
});
338
-
}
339
-
340
-
random(); // 123
341
-
random(); // 123 (кэшированный результат)
342
-
random(); // 123 (кэшированный результат)
343
-
344
-
Дополнительную информацию о помощнике `once` можно найти в [документации по помощникам](/docs/{{version}}/helpers#method-once).
345
-
346
-
<aname="database-performance"></a>
347
-
### Улучшенная производительность при тестировании с базами данных в памяти.
348
-
349
-
_Улучшение производительности тестирования баз данных в памяти было предоставлено [Андерсом Дженбо (Anders Jenbo)](https://github.com/AJenbo)_
350
-
351
-
Laravel 11 предлагает значительный прирост скорости при использовании базы данных `:memory:` SQLite во время тестирования. Для достижения этой цели Laravel теперь поддерживает ссылку на объект PDO PHP и повторно использует его при различных соединениях, часто сокращая общее время выполнения теста вдвое.
352
-
353
-
<aname="mariadb"></a>
354
-
### Улучшенная поддержка MariaDB.
355
-
356
-
_Улучшенную поддержку MariaDB предоставили [Йонас Штауденмейр (Jonas Staudenmeir)](https://github.com/staudenmeir) и [Юлиус Киекбуш (Julius Kiekbusch)](https://github.com/Jubeki)_
357
-
358
-
Laravel 11 включает улучшенную поддержку MariaDB. В предыдущих выпусках Laravel вы могли использовать MariaDB через драйвер MySQL Laravel. Однако Laravel 11 теперь включает специальный драйвер MariaDB, который обеспечивает лучшие настройки по умолчанию для этой системы баз данных.
359
-
360
-
Дополнительную информацию о драйверах базы данных Laravel можно найти в [документации по базе данных](/docs/{{version}}/database).
361
-
362
-
<aname="inspecting-database"></a>
363
-
### Проверка баз данных и улучшенные операции со схемой
364
-
365
-
_Улучшение операций со схемой и проверка базы данных предоставлено [Хафезом Дивандари (Hafez Divandari)](https://github.com/hafezdivandari)_
366
-
367
-
Laravel 11 предоставляет дополнительные методы работы и проверки схемы базы данных, включая встроенное изменение, переименование и удаление столбцов. Кроме того, предоставляются расширенные пространственные типы, имена схем, отличные от стандартных, и собственные методы схемы для управления таблицами, представлениями, столбцами, индексами и внешними ключами:
368
-
369
-
use Illuminate\Support\Facades\Schema;
370
-
371
-
$tables = Schema::getTables();
372
-
$views = Schema::getViews();
373
-
$columns = Schema::getColumns('users');
374
-
$indexes = Schema::getIndexes('users');
375
-
$foreignKeys = Schema::getForeignKeys('users');
74
+
Чтобы начать работу с новыми стартовыми комплектами, ознакомьтесь с [документацией](/docs/{{version}}/starter-kits).
0 commit comments