Laravel 13.3, weekly updates and tip
Laravel 13.3
A whole bunch in this week's release of Laravel 13.3.0. Here are the highlights:
- Display memory usage in verbose queue worker output in #59379
- Add lost connection to
WorkerStopReasonin #59370 - Improve enum support to
QueueManager::connection()in #59389 - Pass request to
afterResponsecallback in #59410 - Add
isNotEmpty()toUriclass in #59408 - Add
capitalizeparameter toStringable::initials()in #59407 - Add
file()toValidatedInputin #59396 - Add enum support to
channel()anddriver()forLogManagerin #59391 - Allow variadic args for model attributes in #59421
#[CollectedBy]should follow inheritance in #59419- Add
withoutFragment()toUriin #59413 - Add
assertHasNoAttachments()toMailablein #59443 - Add
driver()toMailFakein #59448 - Add
BatchStartedevent in #59458 - Introduce
#[UnitTest]in #59432 - Preserve document fragment when decoding query string in #59481
- Allow returning
StringablefromModel::casts()in #59479
You may review the full branch diff on GitHub for a complete list of changes.
Weekly Journal
Last week I made a few more tweaks to the Laravel 13.x Shift. Unfortunately, one of them introduced a temporary bug. When my PR (#59421) was merged, I jumped ahead and allowed Shift to use the new syntax. However, while it was merged, it was not yet tagged. So it caused an issue for Shifters. I reverted my change, but will now revert my revert.
This week I continued upgrading more of my Laravel applications to Laravel 13 - using Shift of course. Although, as noted last week, the /upgrade skill (or just AI) is pretty great at cycling through Composer dependencies. So if Shift doesn't one-shot them, I let AI do the rest. I also let AI assimilate a package that didn't have compatibility with Laravel 13 (more below).
I'm off next week. This is our first year going on Spring Break. So I'll be on vacation with the family. Probably no weekly update.
Weekly Tip
Back to assimilating a package⦠Despite my best efforts, there's always an incompatible package come upgrade season. While cycling through my Composer dependencies Claude noted vimeo/laravel was not compatible. It went on to suggest replacing it since it was just a few API calls (pretty cheeky). But it wasn't the first time I assimilated a lightly used or simple package.
I've said this before, but anytime you add a package to your project you take on the maintenance responsibility. Some packages are obviously worth the tradeoff - Cashier, Filament, etc. But a lot of packages are simply wrappers around API calls. With most APIs being well documented, AI is excellent at writing this code.
Lately, I've been letting it do so for several "API packages". I'll let it do a first pass converting calls to the Http client. If there are a lot, I'll encapsulate them in a service class (e.g. Vimeo or GitHub). Then accessing that as a real-time facade. My application code basically looks the same, and as facades, it's incredibly easy to test at all levels.