Friday, February 11, 2022
Since the release of Laravel 8.0 in September 2020, Laravel has moved from semi-annual to annual releases. This was intended to reduce the maintenance burden for the community. With Laravel 9.0, the longed-for next version of the PHP framework with long-term support appeared on 8 February. After the original release was planned for September 2021, the date was postponed due to the release of Symfony 6.0.
Laravel uses a variety of community-driven packages as well as nine Symfony components for a number of features within the framework. Symfony 6.0 is due for release in November. For that reason, we are choosing to delay the Laravel 9.0 release until January 2022. By delaying the release, we can upgrade our underlying Symfony components to Symfony 6.0 without being forced to wait until September 2022 to perform this upgrade. In addition, this better positions us for future releases as our yearly releases will always take place two months after Symfony's releases.Laravel
As Laravel CEO Taylor Otwell already announced at the Laravel DACH Meetup in November, Laravel 9.0 brings some changes with it. Because V9 is based on Symfony 6.0, which requires at least PHP 8, the same applies to Laravel 9.0. The current minimum required PHP version is 8.0.2. With V9, Laravel has also migrated from Flysystem 1.x to 3.x. Flysystem controls all file manipulation methods provided by the Storage Facade. As part of this, some changes may be required within the application even though efforts have been made to make the transition as seamless as possible. One of the biggest changes in Laravel 9.0 is the move from SwiftMailer, which will no longer be developed as of December 2021, to Symfony Mailer.
The routes:list command has been included in Laravel for some time now. Until now, it could become confusing when trying to define large and complex routes and display them in the console. This has been revised in V9 and a new design has been developed.
The new artisan test -coverage option displays the test coverage directly on the terminal. This also includes the -min option to specify a minimum threshold for test coverage.
In early 2021, Laravel 8.37 came out with a new feature called Anonymous Migrations that prevents migration class name collisions. With Laravel 9.0, this will be the default setting when running php artisan make:migration.
For developers who rely on type hints for static analysis, refactoring, or code completion in their development environment (IDE), the lack of a common interface or inheritance between Query/Builder, Eloquent/Builder and Eloquent/Relation could previously cause problems. The new feature adds a new Illuminate/Contracts/Database/QueryBuilder interface and an Illuminate/Database/Eloquent/Concerns/DecoratesQueryBuilder trait that implements the interfaces instead of the existing _call implementation.
All changes in Laravel 9.0 are described in detail here. An overview of all the new functions and optimisations can also be found on Laracasts with Jeffrey Way. The release of the new Laravel version was also timed to this year's Laracon Online Winter Edition, which is available for free on YouTube. Taylor Otwell used this opportunity to demonstrate some new functionalities live. Many other interesting talks on topics such as "Digital Nomadding", "Modularising the Monolith" and "Web 3.0 and Laravel" are worth a look at the recording.