Ретроспектива Laravel: что изменилось с версии 5.8
Возможно, вы принадлежите к группе людей покинувших Laravel несколько лет назад и хотели бы получить краткий обзор всего изменившегося за это время.
Что же, это ваш счастливый день. Вместо того чтобы часами читать каждое куроводство по обновлению, я воспользовался мощью AI для составления (не исчерпывающего) списка, который даст отличный обзор.
Изменения структуры каталогов Laravel
Перемещённые каталоги
- В Laravel 9 каталог
resource/langбыл перемещён в корневой каталог проекта.
Новые каталоги
- Фабрики/Factories: в Laravel 8 фабрики были переписаны для поддержки классов и хранятся в каталоге
database/factories. - Наполнители/Seeders: с Laravel 8 классы наполнителей/seeder хранятся в каталоге
database/seeders.
Удалённый или изменённый функционал
- Скаффолдинг аутентификации перемещён в репозиторий
laravel/ui. - Хелперы
str_иarray_были удалены из фреймворка в Laravel 6.0 и перемещены в пакетlaravel/helpers. - Фасад
Inputбыл удалён в Laravel 6.0, и разработчики рекомендуют использовать вместо него фасадRequest. - Почтовые драйвера
mandrillиsparkpostбыли удалены в Laravel 6.0. - Драйвер хранилища
rackspaceбыл удалён в Laravel 6.0. - Недокументированные методы
addHiddenиaddVisibleбыли удалены из Eloquent в Laravel 7.0. - Недокументированный почтовый компонент Markdown
promotionalбыл удалён в Laravel 7.0. - Поддержка дубликатов имён маршрутов была удалена в Laravel 7.0.
- Функция Фабрик
typesбыла удалена из Eloquent в Laravel 7.0. - Метод и свойство
retryAfterбыли переименованы вbackoffв Laravel 8.0. - Свойство
timeoutAtбыло переименовано вretryUntilв Laravel 8.0. - Методы
allOnQueue()иallOnConnection()были удалены при использовании цепочки заданий в Laravel 8.0. - Почтовые шаблоны Markdown по умолчанию были изменены в Laravel 7.0 и Laravel 8.0, а старые шаблоны были удалены.
- Правило валидации
passwordбыло переименовано вcurrent_passwordв Laravel 9.0. - Свойство Eloquent модели
$datesобъявлено устаревшим в Laravel 10.0, и разработчиками рекомендуется использовать свойство$casts. - Метод
Redirect:homeобъявлен устаревшим в Laravel 10.0, разработчиками рекомендуется вместо него использоватьRedirect::route('home'). - Устаревшие методы
Bus::dispatchNowиdispatch_now, в Laravel 10.0, были заменены методамиBus::dispatchSyncиdispatch_syncсоответственно. - Устаревший трейт
MocksApplicationServicesбыл удалён из тестов в laravel 10.0.
Более подробно об изменениях для каждой основной версии с laravel 5.8
Изменения в Laravel 6.0 по сравнению с 5.8
- Теперь требуется PHP 7.2 или выше.
- Carbon 1.x больше не поддерживается. Обновлён до Carbon 2.0.
- Хелперы
str_иarray_были перемещены в пакетlaravel/helpersи удалены из фреймворка. - Политики авторизации теперь должны определять метод
viewAny, который будет вызываться, когда пользователь обращается к методуindexконтроллера. - Клиент Redis по умолчанию был изменён с
predisнаphpredis. Чтобы продолжить использоватьpredis, установите для параметра конфигурацииredis.clientзначениеpredis. - Метод
BelongsTo::updateтеперь работает как специальный запрос на обновление, что означает, что он не обеспечивает защиту от массового назначения и не запускает события Eloquent. - Метод
toArrayмодели Eloquent теперь будет приводить любые атрибуты, реализующиеIlluminate\Contracts\Support\Arrayableк массиву. - Путь маршрута верификации электронной почты изменён с
/email/verify/{id}на/email/verify/{id}/{hash}. - Фасад
Inputбыл удалён. Вместо него используйте фасадRequest. - У метода
betweenв планировщике обновилось поведение. - Драйверы электронной почты
mandrillиsparkpostбыли удалены. - Драйвер хранилища
rackspaceбыл удалён. - Передача ассоциативного массива параметров хелперу
routeили методуURL::routeтеперь будет прикреплять эти значения к строке запроса, а не использовать их в качестве значений URI при создании URL-адресов для маршрутов.
Изменения в Laravel 7.0 по сравнению с 6.x
- Теперь требуются Symfony 5 и PHP 7.2.5.
- Обновлены зависимости в файле
composer.json. - Скаффолдинг аутентификации перемещён в репозиторий
laravel/ui. - В
TokenRepositoryInterfaceдобавлен методrecentlyCreatedToken. - Метод
Blade::componentпереименован вBlade::aliasComponent. - Введена собственная поддержка для Blade
тэг компонентов
. - Удалены недокументированные методы
addHiddenиaddVisibleиз Eloquent. - В Eloquent добавлены методы
bootingиbooted. - Изменён формат сериализации данных для методов
toArrayиtoJsonв Eloquent. - Удалена функция
фабричных типов
из Eloquent. - Обновлён метод
getOriginдля учёта приведений и мутаторов. - Удалена библиотека
Zend Diactorosдля генерации ответов PSR-7 и заменена наnyholm/psr7. - Изменены почтовые шаблоны Markdown по умолчанию и удалён недокументированный почтовый компонент Markdown
promotion. - Удалена поддержка дубликатов имён маршрутов.
- Интегрирована поддержка Cross-Origin Resource Sharing (CORS) по умолчанию.
- Драйвер сессии
arrayсделан постоянным для текущих запросов. - Автоматическое экранирование значений для
assertSee,assertDontSee,assertSeeText,assertDontSeeText,assertSeeInOrderиassertSeeTextInOrderв классеTestResponse. - Класс
Illuminate\Foundation\Testing\TestResponseпереименован вIlluminate\Testing\TestResponse. - Класс
Illuminate\Foundation\Testing\Assertпереименован вIlluminate\Testing\Assert. - Обновлено правило валидации
differentдля отказа, если в запросе присутствует один из указанных параметров.
Изменения в Laravel 8.0 по сравнению с 7.x
- Минимальная версия PHP 7.3.0.
- Фабрики моделей были переписаны для поддержки классов.
- Добавлены пространства имён наполнителей/seeders и фабрик.
- Метод и свойство
retryAfterбыли переименованы вbackoff. - Свойство
timeoutAtбыло переименовано вretryUntil. - Методы
allOnQueue()иallOnConnection()были удалены при использовании цепочки заданий. - Paginator теперь использует по умолчанию для стилизации Tailwind CSS фреймворк.
- Автоматическому префиксу namespace контроллера по умолчанию задано значение
nullвRouteServiceProvider. - Метод
decodeResponseJsonв классеTestResponseбольше не принимает аргументы. - Метод
assertExactJsonтеперь требует, чтобы числовые ключи сравниваемых массивов совпадали и располагались в том же порядке. ИспользуйтеassertSimilarJsonдля сравнения без указания порядка.
Изменения в Laravel 9.0 по сравнению с 8.x
- Теперь требуется PHP 8.0.2.
- Обновлены зависимости в
composer.json, включаяlaravel/framework,nunomaduro/collision, и заменёнfacade/ignitionнаspatie/laravel-ignition. - Миграция с Flysystem 1.x на 3.x, может потребовать внесения некоторых изменений в приложение.
- SwiftMailer заменён на Symfony Mailer, что привело к нескольким серьёзным изменениям, связанным с отправкой электронной почты.
- Зависимость Laravel от
opis/closureбыла заменена наlaravel/serializable-closure. - Правило валидации
passwordбыло переименовано наcurrent_password. - Непроверенные ключи массива теперь, по умолчанию, исключаются из проверенных данных.
- Каталог
resources/langтеперь расположен в корневой директории проекта. - Переменная среды
FILESYSTEM_DRIVERбыла переименована вFILESYSTEM_DISK.
Изменения в laravel 10.0 по сравнению с 9.x
- Laravel теперь требуется PHP 8.1.0 или выше и Composer 2.0.0 или выше.
- Обновлено несколько зависимостей в
composer.jsonдля поддержки Laravel 10. - Удалите или обновите параметр
minimum-stabilityв файлеcomposer.jsonвашего приложения. - Используйте
app()->usePublicPath(__DIR__.'/public')вместо привязкиpath.publicк контейнеру для настройкиpublic path
. - Удалите вызов метода
registerPoliciesиз методаbootвAuthServiceProviderвашего приложения. - Запланируйте команду Artisan
cache:prune-stale-tagsдля поддержки тегов кэша Redis. - Обновите способ извлечения необработанного строкового значения грамматики для выражений базы данных с помощью метода
getValueвместо приведения строк. - Передайте имя строки подключения в качестве первого аргумента конструктору
Illuminate\Database\QueryException constructor. - Удалите устаревшее свойство модели Eloquent
$datesи используйте вместо него свойство$casts. - Переименуйте метод
getBaseQueryклассаIlluminate\Database\Eloquent\Relations\RelationвtoBase. - Используйте команду Artisan
lang:publishдля публикации языковой директории в новом приложении Laravel. - Обновите своё приложение для работы с Monolog 3.x, посмотрев руководство по обновлению Monolog и обновив все сторонние пакеты.
- Замените устаревшие методы
Bus::dispatchNowиdispatch_nowна методыBus::dispatchSyncиdispatch_sync, соответственно. - При необходимости переименуйте свойство
$routeMiddlewareклассаApp\Http\Kernelв$middlewareAliases. - Обновите возвращаемые значения метода
RateLimiter::attempt. - Удалите устаревший метод
Redirect::homeи используйте вместо негоRedirect::route('home'). - Удалите из тестов устаревший трейт
MocksApplicationServicesи используйте вместо него фейковые методы, таки какEvent::fake,Bus::fakeиNotification::fake. - Обновите пользовательские правила валидации на основе замыкания для обработки нового поведения обратного вызова
$fail.
Официальные пакеты добавленные с Laravel 5.8
В Laravel были добавлены следующие пакеты:
Laravel Breeze — это минимальная и простая реализация всех функций аутентификации Laravel, включая вход в систему, регистрацию, сброс пароля, валидацию электронной почты и подтверждение пароля. Кроме того, Breeze включает простую страницу Профиля
, где пользователь может обновить своё имя, адрес электронной почты и пароль.
Laravel Cashier Stripe (Paddle) предоставляет выразительный и удобный интерфейс биллинговых услуг подписки Stripe. Он обрабатывает почти весь шаблонный код биллинга подписки, который вы боитесь писать. В дополнение к базовому управлению подпиской Cashier может управлять купонами, заменой подписки, количеством
подписки, льготным периодом отмены и даже создавать файлы PDF-счетов.
Laravel Fortify — это независимая от внешнего интерфейса внутренняя реализация аутентификации для Laravel. Fortify регистрирует маршруты и контроллеры, необходимые для реализации всех функций аутентификации Laravel, включая логин, регистрацию, сброс пароля, валидацию электронной почты и многое другое. У Fortify нет собственного пользовательского интерфейса, он предназначен для сопряжения с вашим пользовательским интерфейсом, который отправляет запросы к зарегистрированным маршрутам.
Laravel Homestead — это официальный, предварительно упакованный Vagrant box, предоставляющий прекрасную среду разработки, не требующую установки PHP, веб-сервера и любого другого серверного программного обеспечения на локальном компьютере.
Laravel Jetstream — это красиво оформленный стартовый набор приложений для Laravel обеспечивающий идеальную стартовую точку для вашего следующего Laravel приложения. Jetstream предоставляет реализацию логина, регистрации, валидации электронной почты, двухфакторной аутентификации, управления сеансами, API через Laravel Sanctum и дополнительных функций управления командой.
Laravel Mix, пакет разработанный создателем Laracasts Джеффри Уэем, предоставляет гибкий API для определения шагов сборки webpack для вашего приложения Laravel с использованием нескольких распространённых препроцессоров CSS и JavaScript.
Laravel Octane повышает производительности приложения, обслуживая ваше приложение с помощью мощных серверов, включая Open Swoole, Swoole, и RoadRunner. Octane загружает ваше приложение один раз, сохраняет его в памяти, а затем отправляет ему запросы со сверхзвуковой скоростью.
Laravel Pennant — это простой и лёгкий пакет feature флагов — без хлама. Feature флаги позволяют уверенно развёртывать новые возможности приложения, проводить A/B-тестирование новых дизайнов интерфейсов, дополнять trunk-based стратегию разработки и многое другое.
Laravel Pint — исправление стиля PHP-кода для минималистов. Pint построен на основе PHP-CS-Fixer и упрощает обеспечение того, чтобы ваш код всегда оставался чистым и согласованным.
Laravel Sail — это лёгкий интерфейс командной строки для взаимодействия со средой разработки Laravel Docker по умолчанию. Sail обеспечивает отличную отправную точку для создания приложения Laravel с использованием PHP, MySQL и Redis, не требуя предварительного опыта работы с Docker.
Laravel Sanctum предоставляет лёгкую систему аутентификации для SPA, мобильных приложений и простых API на основе токенов. Sanctum позволяет каждому пользователю вашего приложения создавать несколько API токенов для своей учётной записи. Этим токенам могут быть представлены способности/области видимости, которые определяют, какие действия разрешено выполнять токенам.
Laravel Valet — среда разработки для macOS минималистов. Laravel Valet настраивает ваш Mac так, чтобы Nginx всегда запускался в фоновом режиме при запуске компьютера. Затем, используя DnsMasq, Valet проксирует все запросы в домене *.test, чтобы они указывали на сайты, установленные на вашем локальном компьютере.