Ретроспектива Laravel: что изменилось с версии 5.8

Погрузитесь в историю Laravel. Если вы отдалились от Laravel, это подходящее место, чтобы возобновить своё путешествие.

Возможно, вы принадлежите к группе людей покинувших Laravel несколько лет назад и хотели бы получить краткий обзор всего изменившегося за это время.

Что же, это ваш счастливый день. Вместо того чтобы часами читать каждое куроводство по обновлению, я воспользовался мощью AI для составления (не исчерпывающего) списка, который даст отличный обзор.

Изменения структуры каталогов Laravel

Перемещённые каталоги

  1. В Laravel 9 каталог resource/lang был перемещён в корневой каталог проекта.

Новые каталоги

  1. Фабрики/Factories: в Laravel 8 фабрики были переписаны для поддержки классов и хранятся в каталоге database/factories.
  2. Наполнители/Seeders: с Laravel 8 классы наполнителей/seeder хранятся в каталоге database/seeders.

Удалённый или изменённый функционал

  1. Скаффолдинг аутентификации перемещён в репозиторий laravel/ui.
  2. Хелперы str_ и array_ были удалены из фреймворка в Laravel 6.0 и перемещены в пакет laravel/helpers.
  3. Фасад Input был удалён в Laravel 6.0, и разработчики рекомендуют использовать вместо него фасад Request.
  4. Почтовые драйвера mandrill и sparkpost были удалены в Laravel 6.0.
  5. Драйвер хранилища rackspace был удалён в Laravel 6.0.
  6. Недокументированные методы addHidden и addVisible были удалены из Eloquent в Laravel 7.0.
  7. Недокументированный почтовый компонент Markdown promotional был удалён в Laravel 7.0.
  8. Поддержка дубликатов имён маршрутов была удалена в Laravel 7.0.
  9. Функция Фабрик types была удалена из Eloquent в Laravel 7.0.
  10. Метод и свойство retryAfter были переименованы в backoff в Laravel 8.0.
  11. Свойство timeoutAt было переименовано в retryUntil в Laravel 8.0.
  12. Методы allOnQueue() и allOnConnection() были удалены при использовании цепочки заданий в Laravel 8.0.
  13. Почтовые шаблоны Markdown по умолчанию были изменены в Laravel 7.0 и Laravel 8.0, а старые шаблоны были удалены.
  14. Правило валидации password было переименовано в current_password в Laravel 9.0.
  15. Свойство Eloquent модели $dates объявлено устаревшим в Laravel 10.0, и разработчиками рекомендуется использовать свойство $casts.
  16. Метод Redirect:home объявлен устаревшим в Laravel 10.0, разработчиками рекомендуется вместо него использовать Redirect::route('home').
  17. Устаревшие методы Bus::dispatchNow и dispatch_now, в Laravel 10.0, были заменены методами Bus::dispatchSync и dispatch_sync соответственно.
  18. Устаревший трейт 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, чтобы они указывали на сайты, установленные на вашем локальном компьютере.

Дополнительные материалы

Предыдущая Статья

Выпущен первый Alpha релиз PHP 8.3

Следующая Статья

Как исправить: Using $this when not in object context