Ретроспектива 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
, чтобы они указывали на сайты, установленные на вашем локальном компьютере.