Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Laravel 9.x Shift #5110

Merged
merged 33 commits into from Aug 16, 2023
Merged

Laravel 9.x Shift #5110

merged 33 commits into from Aug 16, 2023

Conversation

pmoskrojas
Copy link
Contributor

@pmoskrojas pmoskrojas commented Aug 8, 2023

This pull request includes the changes for upgrading to Laravel 9.x. Feel free to commit any additional changes to the shift-97359 branch.

Before merging, you need to:

  • Checkout the shift-97359 branch
  • Review all pull request comments for additional changes
  • Run composer update (if the scripts fail, add --no-scripts)
  • Clear any config, route, or view cache
  • Thoroughly test your application (no tests?, no CI?)

If you need help with your upgrade, check out the Human Shifts. You may also join the Shifty Coders Slack workspace to level-up your Laravel skills.

ci:docker-executor-node-ssr:feature/FOUR-9714
ci:connector-send-email:feature/FOUR-9714
ci:package-webentry:feature/FOUR-9714
ci:package-savedsearch:feature/FOUR-9714
ci:package-data-sources:feature/FOUR-9714

Accessing Faker properties was deprecated in Faker 1.14.
In an effort to make upgrading the constantly changing config files
easier, Shift defaulted them and merged your true customizations -
where ENV variables may not be used.
From the [PHPUnit 8 release notes][1], the `TestCase` methods below now declare a `void` return type:

- `setUpBeforeClass()`
- `setUp()`
- `assertPreConditions()`
- `assertPostConditions()`
- `tearDown()`
- `tearDownAfterClass()`
- `onNotSuccessfulTest()`

[1]: https://phpunit.de/announcements/phpunit-8.html
@pmoskrojas
Copy link
Contributor Author

⚠️ Shift detected a custom namespace. Laravel now recommends keeping the default App namespace. Unfortunately the app:name command was removed in Laravel 6.0. However, for the most part you, may do a simple search and replace to change the namespace.

Shift recommends changing this to align with the latest Laravel conventions and improve Shift's automation. After doing so, you may request a rerun of this Shift.

@pmoskrojas
Copy link
Contributor Author

ℹ️ Shift noticed you have additional namespaces in your application. You may use the Consolidate Namespaces Shift to simplify your namespaces into the default Laravel App namespace.

@pmoskrojas
Copy link
Contributor Author

ℹ️ Laravel 9 moved the resources/lang folder to the top level of the project. While Shift moved and replaced references to this folder, you may have additional references to this folder which need to be updated.

@pmoskrojas
Copy link
Contributor Author

⚠️ Laravel 9 upgraded to Flysystem 3.0 causing the behavior of the Storage facade to change slightly:

  • Write operations (such as put and write) now overwrite existing files by default and return false instead of throwing an exception.
  • Read operations (such as get and download) now return null instead of a FileNotFoundException when a file is missing.
  • The delete operation now returns true even if the file did not exist.

For more details, you may review the Flysystem 3.x section of the Upgrade Guide.

@pmoskrojas
Copy link
Contributor Author

⚠️ Laravel 9 transitioned from SwiftMailer to Symfony Mailer. While this transition should be relatively seamless and Shift automates any tedious changes, some changes may not reliably be automated.

Dependencies
Some mail providers may require an additional dependency. For example, if you are using Mailgun, then you will need to install the symfony/mailgun-mailer package:

composer require symfony/mailgun-mailer symfony/http-client

Updated Return Types
The send, html, raw, and plain methods now return an instance of Illuminate\Mail\SentMessage.

Proxied Illuminate\Mail\Message Methods
Shift detected that you may be using calling some methods on Illuminate\Mail\Message that were being proxied to the underlying Swift_Message class. These are now being proxied to the Symfony\Component\Mime\Email class instead, which has different method names and signatures.

Failed Recipients
It is no longer possible to retrieve a list of failed recipients after sending a message. Instead, a Symfony\Component\Mailer\Exception\TransportExceptionInterface exception will be thrown if a message fails to send. Instead of relying on retrieving invalid email addresses after sending a message, it is recommend that you validate email addresses before sending the message instead.

For more details on what has changed you may review the Symfony Mailer section of the Upgrade Guide.

@pmoskrojas
Copy link
Contributor Author

❌ Shift could not upgrade the following files since they differed from the default Laravel version. You will need to compare these files against the default Laravel 9 versions and merge any changes:

  • lang/en/auth.php
  • lang/en/validation.php

@pmoskrojas
Copy link
Contributor Author

⚠️ The FILESYSTEM_DRIVER environment variable was renamed to FILESYSTEM_DISK in Laravel 9. Shift attempted to automate this change, but you should review any additional environment configuration and rename this variable.

@pmoskrojas
Copy link
Contributor Author

⚠️ Shift upgraded your configuration files by defaulting them and merging your true customizations. These include values which are not changeable through core ENV variables.

You should review this commit for additional customizations or opportunities to use new ENV variables. If you have a lot of customizations, you may undo this commit with git revert 89f9e4f1 and make the config file changes manually.

@pmoskrojas
Copy link
Contributor Author

ℹ️ The FILESYSTEM_CLOUD environment variable was removed in a later release of Laravel 8. While you may still use the cloud disk, you are encouraged to configure your own disks.

@pmoskrojas
Copy link
Contributor Author

⚠️ The token driver for API authentication is no longer available. This driver was not very robust and was removed from the documentation. Laravel now recommends using Sanctum.

If you were using the token driver, you may re-add it within your auth.php configuration file then migrate to Sanctum at your convenience.

@pmoskrojas
Copy link
Contributor Author

ℹ️ Shift updated your dependencies for Laravel 9. While many of the popular packages are reviewed, you may have to update additional packages in order for your application to be compatible with Laravel 9. Watch dealing with dependencies for tips on handling any Composer issues.

The following dependencies were updated by a major version and may have their own changes. You may check their changelog for any additional upgrade steps.

@pmoskrojas
Copy link
Contributor Author

ℹ️ Laravel 9 adopted anonymous migrations. Shift automated this change to align with modern Laravel conventions and avoid naming migrations.

@pmoskrojas
Copy link
Contributor Author

ℹ️ All of the underlying Symfony components used by Laravel have been upgraded to Symfony 6. If you are directly interacting with any Symfony component, you should review the Symfony change log for additional changes.

@pmoskrojas
Copy link
Contributor Author

⚠️ The $loop variable is no longer available when iterating over a LazyCollection. Shift detected the $loop variable being used in the following Blade templates. You should review these instances to ensure they are not iterating over a LazyCollection or track your own loop variables.

  • resources/views/shared/breadcrumbs.blade.php

@pmoskrojas
Copy link
Contributor Author

ℹ️ The HTTP client has been updated to have a default timeout of 30 seconds. Previously there was no default. The underlying request would wait indefinitely. Now an exception is thrown after 30 seconds.

If you find your requests need longer, you may prefix your request to specify a timeout:

Http::timeout(60)->get("https://laravelshift.com");

@pmoskrojas
Copy link
Contributor Author

ℹ️ The app/Models folder was reintroduced back in Laravel 8. This was an optional change. Laravel and the artisan commands will automatically detect if you are using the app/Models folder or not.

If you wish to modernize your application to use the app/Models folder, you may run the Namespace Models Shift for free.

@pmoskrojas
Copy link
Contributor Author

ℹ️ Laravel 9 now uses Vite to build frontend assets. While you may continue to use Laravel Mix, it is no longer the default. If you wish to modernize your application to use Vite, you may run the Vite Converter for free.

@pmoskrojas
Copy link
Contributor Author

⚠️ Shift detected you are using a Laravel package like Horizon or Nova which may need to have its published assets regenerated after upgrading. Be sure to use artisan to republish these assets as well as php artisan view:clear to avoid any errors.

@nolanpro nolanpro changed the base branch from develop to next August 15, 2023 22:51
@nolanpro nolanpro changed the base branch from next to feature/FOUR-9714 August 16, 2023 22:48
@nolanpro nolanpro merged commit 9bfbfb8 into feature/FOUR-9714 Aug 16, 2023
12 of 15 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
4 participants