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 6.x Shift #3861

Merged
merged 12 commits into from
Nov 19, 2019
Merged

Laravel 6.x Shift #3861

merged 12 commits into from
Nov 19, 2019

Conversation

jbrooksuk
Copy link
Member

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

Before merging, you need to:

  • Checkout the shift-20595 branch
  • Review all pull request comments for additional changes
  • Update your dependencies for Laravel 6
  • Run composer update (if the scripts fail, add --no-scripts)
  • Thoroughly test your application (no tests?)

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.

In an effort to make upgrading the constantly changing config files
easier, Shift defaulted them so you can review the commit diff for
changes. Moving forward, you should use ENV variables or create a
separate config file to allow the core config files to remain
automatically upgradeable.
@jbrooksuk
Copy link
Member 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 6 versions and merge any changes:

  • app/Http/Kernel.php
  • resources/lang/en/validation.php

@jbrooksuk
Copy link
Member Author

⚠️ Shift defaulted the following configuration files. This was done in the Default config files commit so you may easily review and backfill your customizations. If you have a lot of customizations, you may also undo this commit with git revert and upgrade these files manually.

  • config/auth.php
  • config/broadcasting.php
  • config/cache.php
  • config/database.php
  • config/filesystems.php
  • config/logging.php
  • config/mail.php
  • config/queue.php
  • config/services.php

@jbrooksuk
Copy link
Member Author

ℹ️ Laravel 6 changed the default Redis client from predis to phpredis. You may keep using predis by setting REDIS_CLIENT=predis for your environment.

However, if possible, consider switching to phpredis to gain the performance of its PHP extension and avoid using the deprecated predis dependency which will be removed in Laravel 7.0.

@jbrooksuk
Copy link
Member Author

ℹ️ Shift makes an effort to update your dependencies for Laravel 6. While many of the popular packages are reviewed, you may have to update additional packages or version constraints in order for your application to be compatible with Laravel 6. Watch dealing with dependencies for tips on handling package incompatibilities.

@jbrooksuk
Copy link
Member Author

❌ Laravel 6 has a development dependency for phpunit/phpunit of ^8.0. You have a modified dependency for phpunit/phpunit in your composer.json. You should review your dependency and ensure it meets the new version requirement.

@jbrooksuk
Copy link
Member Author

⚠️ In Laravel 6, the update method of the BelongsTo relationship no longer provides mass assignment protection or fires Eloquent events. If you wish to preserve this behavior, you should call update on the model itself.

// no mass assignment protection or events...
$post->user()->update(['foo' => 'bar']);

// mass assignment protection and events...
$post->user->update(['foo' => 'bar']);

Shift found potential uses of the update method in:

  • app/Http/Controllers/Dashboard/UserController.php

@jbrooksuk
Copy link
Member Author

ℹ️ The Eloquent model's toArray() method will now cast any attributes that implement Illuminate\Contracts\Support\Arrayable to an array. While unlikely to impact your application, this change could effect code which relies upon the previous data type or output.

@jbrooksuk
Copy link
Member Author

⚠️ PHPUnit 8 deprecates using assertContains for strings. This assertion now only handles arrays or Traversable objects. Shift attempted to convert assertions where possible, but detected remaining uses of assertContains. You should review these instances and convert to the new string assertion methods if necessary.

  • tests/Functional/Incident/MetaSeoTest.php

@jbrooksuk
Copy link
Member Author

⚠️ Previous versions of Laravel would bind parameters passed to the URL helper methods as placeholder values even if the names mismatched. In Laravel 6, named parameters not matching placeholders are attached to the query string instead.

Shift detected the following route() and action() calls passing named parameters you should review to ensure they match the route placeholder name.

  • resources/views/dashboard/incidents/updates/index.blade.php
  • resources/views/partials/incidents.blade.php
  • resources/views/signup.blade.php
  • resources/views/single-incident.blade.php

@jbrooksuk
Copy link
Member Author

ℹ️ Laravel 6 made performance optimizations for integer key types. If you are using a string as your model's primary key, you may set the $keyType property on your model.

/**
 * The "type" of the primary key ID.
 *
 * @var string
 */
protected $keyType = 'string';

@jbrooksuk
Copy link
Member Author

ℹ️ The mandrill and sparkpost mail drivers, as well as the rackspace storage driver were removed in Laravel 6. If you were using these drivers, you may adopt a community maintained package which provides the driver.

@jbrooksuk
Copy link
Member Author

ℹ️ Previous versions of Laravel would retry jobs indefinitely. Beginning with Laravel 6, the php artisan queue:work now tries a job one time by default. If you want to force jobs to be tried indefinitely, you may pass the --tries=0 option.

@jbrooksuk
Copy link
Member Author

ℹ️ While it was common to customize in previous versions, Laravel now recommends keeping the default App namespace. This will also improve your upgrade process. You can easily change it to the default by running php artisan app:name App. After doing so, you are welcome to request a rerun of this Shift.

@jbrooksuk
Copy link
Member Author

🎉 Congratulations, you're now running the latest version of Laravel.

The following Shifts can ensure your app is fully upgraded and following the practices recommended by Laravel and the community:

  • Laravel Linter analyzes your codebase for potential opportunities to do things "The Laravel Way".
  • Laravel Fixer automates many of the suggestions found by the Linter and other Shifts.
  • Upgrade Checker ensures your application is fully upgraded by detecting any outdated code.

In addition, stay upgraded forever as well as run these Shifts by subscribing to one of the new Shifty Plans.

@jbrooksuk jbrooksuk merged commit e077162 into 3.x Nov 19, 2019
@jbrooksuk jbrooksuk deleted the shift-20595 branch November 19, 2019 17:44
@jbrooksuk
Copy link
Member Author

Shifted to Laravel v6. More work to be done.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants