Laravel 8.65, weekly updates, and 🔥 tip

Laravel 8.65

Since I missed last week, I'm going to cover the changes in both the 8.64.0 and 8.65.0 release.

Here are the highlights:

  • Add reduceMany to Collection in #39078
  • Add stripTags to Stringable in #39098
  • Add getOutput to Console output in #39099
  • Add lang_path helper function in #39103
  • Add @aware blade directive in #39100
  • Dispatch new JobRetrying event in #39097
  • Add throwIf to Client Response in #39148
  • Add hasAny to Collection in #39155
  • Ability to validate multiple date formats in #39170
  • Add gate policy callback in #39185
  • Allow Remember Me cookie expiration to be overriden in #39186
  • Add --test and --pest options to various make commands in #38997
  • Add assertions for notifications sent on-demand in #39203
  • Ability to retrieve a subset from Request::collect in #39191
  • Add assertRedirectContains in #39233
  • Add headline to Stringable in #39174
  • Log deprecations instead of treating them as exceptions in #39219

You may review the full branch diff on GitHub for a complete list of changes.

This version bump and update is automated for subscribers to a Shifty Plan. If you don't have one of those, be sure to bump your constraint and run composer update to get the latest features.

Weekly Journal

Last week I was off for my honeymoon which provided some time away from the computer to relax in beautiful Sedona. I also doglegged the trip home by attending LonghornPHP. The conference allowed me to catch up with some devs, including Taylor, as well as give a talk on testing.

Testing seemed to have an increased focus at the conference. Joel Clement also gave a talk on tooling to improve code quality. Of course, the Shift Workbench got an honorable mention alongside other tools like PHP CS Fixer and PHPStan.

This is timely as last week Jess continued working on a new Shift to configure CI build. I hope to launch the MVP tomorrow, which will initially support GitHub via GitHub Actions.

As this receives more usage, I plan to configure CI for Bitbucket and GitLab as well.

As I noted in a Twitter thread, I've been working on making the Shift experience more holistic. While upgrading is the main part, having tests and CI is the other part. The Tests Generator was the first step, the CI Generator is the next. Together these will give you more confidence when merging future Shifts by providing a nice green checkbox.

This week I will focus on launching the CI Generator and complete the remaining Human Shifts from last week.

🔥 Tip

As always, completing the Human Shifts gives me an opportunity to dog food Shift. I noticed something in the Laravel 5.0 Shift where some folders were not renamed according to PSR-4.

Seems like there's been a bug when nested folders were being renamed after the parent folder had already been renamed. Although I had logic in place to track renamed folders, there must have been some edge case.

After review, it dawned on me that if I sorted the folders by depth, I would avoid any scenarios where I renamed the parent folder first.

To do so, I had the opportunity to use PHP usort, as well as the spaceship operator to compare path depths (with a unary negation for descending order). 🔥

usort($lowercase_directories, function ($a, $b) {
return -(substr_count($a, DIRECTORY_SEPARATOR) <=> substr_count($b, DIRECTORY_SEPARATOR));