Laravel 8.63, weekly updates, and 🔥 tip

Laravel 8.63

Couple fixes and new methods this week, which brings us to Laravel 8.63.0.

Here are the highlights:

  • Fix castable value object not serialized correctly in #39020
  • Fix casting to string on PHP 8.1 in #39033
  • Handle empty address for Mail in #39035
  • Add missing singular minute() call in #39050
  • Only allow a single User-Agent header for HTTP client in #39085

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.

Also of note this week is Vapor now supports Octane.

Weekly Journal

Last week Jess and I made a few more improvements to the Tests Generator. Mainly adding and strengthening the generated assertions.

Once those were in place we paired up on generating tests with the Pest framework instead of the PHPUnit. This will happen automatically if Shift detects a pestphp/pest dependency for the project. Otherwise it will continue to generate PHPUnit test classes.

I spent a little more time on the remaining Human Shifts. I also bump my additional test assertions package to 2.0. This removes the conflicts with Laravel's native assertNotSoftDeleted and adopts my new Support Policy.

Friday I spent most of the day resolving the LetsEncrypt root certificate expiration. I chronicled the saga on Twitter. tl;dr, this was a combination of issues with Electron and the certificate. I ultimately ended up purchasing a new SSL certificate to resolve the issue.

Jess will focus on bumping the Electron version for the Workbench desktop app so it has the patch as well.

This week we will continue to focus on Workbench issues. These piled up a bit more than I liked while we finished other work. So we'll be squashing all the open bugs this week.

We also had an idea for another new Shift. I hope to try to have a beta ready by end of October.

On a personal note, I'm taking the next two weeks off. It is our wedding this Saturday, followed by a short honeymoon next week. Then immediately followed by LonghornPHP.

I actually bought a ticket to this conference as I have been feeling a bit isolated lately. Normally conferences are my opportunity to geek out and be social. With in-person conferences starting back and seeing the Laracations on Twitter, I was having some FOMO.

Despite being immediately after my honeymoon, I am going to go as I was asked to fill in for a talk last minute. So it'll be nice to not only see fellow devs in person, but also speak.

Bringing it back to Shift, while I will answer support emails next week, I will not send out this newsletter. This will end my streak of sending these out every week for over a year.

🔥 Tip

It's no secret I'm a fan of regular expressions. A good portion of Shift still uses them over parsing the abstract syntax tree simply for the fact that I am faster at them.

For example, an edge case was reported for the Workbench where it replaced the Route name with the new tuple syntax.

Route::get('/event/{event}', 'EventController@show')->name('events@show');

While uncommon, you can apparently use this syntax. So I updated the regular expression which checks for this action string syntax to use a negative lookbehind.

In this case, making sure that the string is not an argument within a name call.

/(?<!name\()([\'"])([\w\\\\]+)@(\w+)\1/

This is undoubtedly line noise. And it's not 100%. But this one-liner has otherwise proper converted thousands of applications. Yet another example of YAGNI and the power of regex. 🔥