Faster NativePHP, PHP pipes, and AI chat kits
Download MP3This is the Laravel News Podcast, your
one-stop podcast to find out about
Laravel-related news, tutorials, packages,
and more. Here are your hosts, Jake
Bennett and Michael Dyrynda.
There it is.
For those of you who happen to be watching
online, Mr. Dyrynda is currently holding
up
a little elephant that is... He's got a
name. Is it Bruno?
Bruce.
Bruce. Bruce the Elephant. If you've never
been to Laravel Australia before,
you may not know who Bruce is. Bruce is
the official mascot of Laravel Australia,
and Michael has recently commissioned an
LED sign
of said Bruce, as well as the upcoming
theme of Laracon AU this year. So, pretty
freaking awesome. If you're not watching
on- online, you should- you should check
it out, 'cause it looks really, really
darn cool. Michael, tell us a little bit
about this thing.
Yeah, I had- I had this... When we- when
we started putting the branding together
for this year, it was... We- we landed on
this notion of Level Up, and it- and it
came together in a really, I think, clever
way, which maybe is a- is a discussion
-for another podcast, but...
-Okay, sure.
When I saw the final version of this Level
Up logo, or this, uh...
-What do they call it? This l- lock up.
-Mm-hmm.
'Cause we've got a couple of different-
we've got a couple of different lock ups
for the Level Up logo, but this particular
one, which is a- which is a square where
Bruce actually jumps up the ladder
of the- of the level.
I thought that's- that'd look really cool
as a sign, and so I- I found a place on
Etsy
that manufactures these LED signs, and I
just got it in- I just got the delivery
yesterday, so. I haven't quite figured out
how to... There's- if- if you're watching
the video, you can see there's, like, a
piece of paper on my wall here that-
-Mm-hmm.
-Which is the template for where I need to
put it on the wall, but I have no idea as
yet how I'm going to mount it, how I'm
going to wire it up. Because each- each of
the 15 pieces of the-
of the logo are individually wired with
LEDs. I've got to figure out how to kind
of connect it all up, uh, and- and get it
on the wall without,
um, damaging the sign, the wall, or
burning my house down. So, wish me luck.
If you've- if you've had any experience
in- in wiring these things up, uh, reach
out to me. If you can help, that'd be
great.
Absolutely. It's gonna look awesome
though. I'm confident.
It definitely seems like a good... All
right. It's gonna look great. Like, just-
just seeing it, just the- the one piece
there. Um, maybe I'll share it on- on
-Twitter. But...
-Absolutely. I said if there's anybody I
know who could do it, it would be Michael
Dorinda.
-We'll figure it out.
-Michael can figure it out.
It definitely feels like a weekend
project, though.
Yes. Yeah, yeah. It's gonna take a little
bit of time. Little bit of time. Well,
episode 241 is what we're on, folks.
Thanks for joining us. July 14th, 2025 is
the date. We've got some releases, some
news, some packages. All sorts of good
tutorials, and they're coming your way
right now. Here we go. Episode 241,
Releases, Laravel version 12.20. So,
Laravel team released this, with the
ability to fail while throttling ...
For a context remember method, the ability
to customize the collection pluck with
the callback, and more. So let's start
with that remember context. Ben Askew
contributed context remember, and remember
hidden functions, which will add the
result of the provided closure to the
context, if not already present, and
always return the result. So before, what
you'd have to do is you'd have to check to
see if context... And context, again, is
something we've talked about on this show
for quite some time. Uh, but context is a
Laravel class that you can now use, that
will maintain the context of the, uh,
request. So you can say, "Add this to the
context," it will persist for the
lifecycle of that request. And so, what
you used to have to do is context has, and
you check to see if a key existed, and
then if it didn't, then you would have...
Sorry, actually, let's- let's take the...
Let's- let's dig in a bit here. If it did
have that, then you'd have to retrieve it.
Otherwise, you'd have to go set it and
then return it, right? And so, that's-
that's kind of what it was. It was- it was
not friendly. And so with this, you can
now say, "Context remember," you can pass
in the key, then you can pass in a
closure, which will either return the
value of that key, or will set it using
the result of that closure. So it's really
much nicer. Thanks, Ben, for writing that
one up.
Balboa codes contribute doesn'tStartWith
and doesn'tEndWith string methods to the
stringable classes, which are the
opposite, of course, of startsWith and
endsWith. You can compare the value
against another string or an array of
strings. It does exactly what it says.
Doesn'tStartWith, doesn'tEndWith, nice and
simple there.
Adding the failWhen method to the
ThrottlesExceptionQueueMiddleware. Michael
Dza Jha... Oh boy, hmm.
-Michael Japeridze.
-Ooh, man. Japeridze. Did you paste that
into, like, some sort of... Nope.
That's a really good one. That's a really
good one. Congra- congratulations.
-It's good.
-Contributed a failWhen method to the
ThrottlesExceptionMiddleware. So
currently, this middleware
only allows for deleting the job when a
specific exception is thrown.
There are occasions where you would want
to mark the job as failed instead. For
instance, in the context of a job chain,
it may be desirable to fail a job when an
exception is thrown so that the chain
stops executing rather than deleting the
job from the chain there. So an example is
given, you have this middleware. Throttle
the exceptions, delete when a-... fail
when, and so you can now do either one of
those, uh, so that's really nice. Pull
request 56180 for details if you need.
Additionally, the q- the queue
documentation also provides more
information on using that throttles
exception middleware, which is really
handy for these jobs.
Uh, Punyabul Sha contributed a new fake
method to the queue facade that allows the
same pattern used by the event facade. So
before, you'd have to queue fake, and
then afterward, you'd have to do some
manual cleanup that was required. Now you
can do queue fake for, and then you can
pass in a closure there. The original
queue is automatically restored once
that's done. So it only fakes for that
particular instance and then, uh, allows
you to do selective job faking there. It
also allows your critical jobs to be
queued normally while you're faking the
others. So, really nice, uh, really nice
addition there.
Adding JSON serializable interface to the
URI class. Uh, Diva Marelis added the
JSON serializable interface to the URI
class to make sure that it's properly
converted to JSON when you're serializing
that.
We've got the fluent class being made
iterable now. So this is, uh, this is
introducing the iter- iterable contract to
the fluent class, which addresses a small
paper cut when using fluent with loops.
So right now, you need to call toarray in
order to iterate over that. Now the
settings property is iterable in Laravel
12.20, so you don't have to do that
toarray before iterating over that
anymore.
The collection method was added to the
config repository. So Kennedy Tedesco
contributed a collection method to return
a collection instance from the config
repository. So now you can say
config.dodop.collection and then pass
in the period-separated or the,
um... This is, this is what's used inside
of Laravel when you're needing to sort of-
Yeah
-... dig into-
-The dot notation
... dot notation. Thank you. That's what I
was searching for. Previously, you would
have to collect the config array. Now you
can just do config collection-
-Mm-hmm
-... and it will grab out a collection for
-you.
-Yeah, I've done that a few times. This is
nice.
-That's super nice.
-These, these paper cuts, these little
things that when you see it, when someone
submits the pull request and adds it to
-the framework, you go, "Yeah, of course."
-Of course.
How have, how have I been living without
this? Because the amount of times that
I've done collect config, you know, in, in
my time, it's, uh,
just if... I don't know. If you ever
repeat these things, just submit a pull
request.
Well, it is great too because, like, if
you're using configs in any sort of way
that's more than just pulling a single
value from the config, there's many, many,
many times where you're gonna need to
pull it into some sort of collection so
you can iterate over and work with those
values or pull a specific piece out by
-name-
-Yeah
... or, uh, or you know, do some sort of
operations on them rather than just
referencing them as static values. So, um,
had to do this a couple times myself, so
this is really nice. Adding closure
support to the collection pluck method.
Ralph J. Smith contributed an update to
the pluck method that allows
customizations to the keys and the values
that are being returned from that pluck.
Sounds, uh... Does just like what it
sounds like. You get that pluck passing a
closure, then you can return, uh, whatever
you like from that. Um, so there you have
that. Context blade directive, Martin
Bean contributed a context blade directive
to determine if a context value exists
inside of a blade file, of course. So
context canonical if it is. So it's like a
conditional set up, so instead of if
context has the word canonical, then do
this. Nope, no longer needed. You just
specify @context in your blade file, and
if the key that you pass in there exists,
the following portion will then render.
Really nice there. Pull request 56146. Of
course, you can see all of the changes and
fixes inside of the release notes for
1219 and 1220 on GitHub.
-There you have it.
-Just a... Just on that context one, does
that also then inject
a value? It does. Very cool.
-So not only does it-
-Hmm. That was nice
... provide you that conditional check, it
will
provide the value of that context
parameter in the value
-variable.
-Yeah.
So the dollar value will be whatever it is
the context get of that key. So that is,
that is smart thinking, Martin. Like that
one.
Very nice.
On to the news. JetBrains PHPverse 2025
happened a few weeks ago
to commemorate, to celebrate the 30th
anniversary or the 30th birthday of PHP,
which brought together core contributors,
framework authors, and passionate
community members for a one day event
packed with insightful talks. From long
time maintainers to new faces in
internals, the event served as both a
reflection on PHP's evolution and a
glimpse of what's coming next. It was
streamed online and peaked at 4,000
simultaneous watchers live from all over
the world, and now all the talks have been
published, so it's the perfect time to
revisit the key moments and catch up with
any of the talks that you might have
missed. So it talks about FrankenPHP,
which is now a official part of the PHP
project. It is, uh, used as like a, a
driver, I think is the, the terminology
for something like Laravel Octane.
Talked about 20 years of Symfony, uh, MCP
in PHP, how AI is changing the tech
industry. There was a Q&A with our very
own Taylor Otwell, the fu- future of PHP
education, growing PHP for the future, and
so on. So we'll have links to all of that
for you in the show notes. There's also
some cool PHPverse swag, and no event, of
course, is complete without awesome swag,
and
the JetBrains team went above and beyond.
Each attendee received a bag filled with
PhpStormStorm shirts and hoodies, a mouse
pad, a, an elephant, uh, a PHP elephant
Lego, and more. Uh, some of the items are
available on the swag store. I had a look
earlier. There is T-shirts. There is a
hoodie. Um, and there are some pins and
stickers as well, so check that out, uh,
if you wanna get involved in any of that
stuff. So, uh, links to all that in the
show notes.
Love the Lego PHP elephant. Pretty
exclusive stuff there.
-Mm-hmm.
-I have a feeling there's gonna be quite a
few people scrambling to get their hands
on that one. Really, really cool stuff.
Thanks so much, JetBrains, for putting
that together. Uh, great, great work on
that.All right. Laravel in 2025. So as
crazy as it sounds,
July 2nd was the midpoint of this year,
which means we're more than halfway
through the year. Yikes. So the team here
at Laravel News thought it'd be nice to
recap some of the most memorable moments
so far at Laravel News. So the following
posts that we're gonna talk about are a
mix of some of our most popular posts,
community milestones, as well as products
and events that have happened. So let's
start with Laravel 12. We used to have
Laracon Online, which is where we would do
some of these bigger announcements, but
then some of these, now that we don't have
Laracon Online, are just taking place on
Bluesky and on X, right? So Laravel 12 was
released on February 2024, uh, of this
year. So, uh, sorry. I said 2024. February
24th of 2025, my apologies. Um, there was
also the new starter kits that were
launched with that, with the first-party
starter kits. The Laravel Installer also
now supports these custom starter kits,
which is really neat. If you have not yet
seen that or read about that, we have that
in a blog post. Uh, you should check this
one out. The custom starter kits are
really, really powerful. It used to be,
um, a lot more difficult to do this, but
now you can install Laravel using these
custom starter kits. It's a great way to
get apps up and running, um, really
quickly using your custom configuration.
Uh, Laravel 12 was also insanely easy to
upgrade compared to previous versions of
Laravel. So it used to be that it was, you
know, quite a few steps you'd have to
take between, uh, versions. Laravel 12 was
by far the easiest. Now I still happened
to use Laravel Shift for all the ones that
we moved from 11 to 12. Just a couple
little pieces and, and parts that are
really nice to just have Laravel Shift to
take care of for you, but by and large, it
was basically a composer.json update and
that was about it. It was really, really
-good.
-Mm-hmm.
It also leverages Inertia 2.0 for the Vue
and React Starter Kits. If you did have
Nova running, you were gonna have to... I-
if it was on a older version, you were
gonna have to upgrade that as well. So
again, that is one other thing to be aware
of, uh, when you're, uh, shifting.
The Laravel Shift will help take care of
for you as well. Uh, but great upgrade
there. The path from 11 to 12 was amazing,
so great job to the Laravel team on that
front. Laravel Cloud was also released in
February along with the Laravel 12
release. This is, of course, a fully
managed infrastructure platform and the
fastest way to deploy and scale your
Laravel applications. Lots of beta testers
helped to contribute to making this what
it is today. And of course, the team has
done an amazing job on making the UI feel
absolutely amazingly buttery smooth. I- I
literally can't
think of a better way to describe it. It
just feels so good to use, and so great
job to the team on that one. Know lots and
lots of time was poured into making that
what it is today, and if you haven't
checked it out, you definitely should.
Native PHP Mobile version 1 launched on
May 2nd, which brings your Laravel app to
the iOS and Android device stores. There's
been, you know, lots of years that we've
been developing web applications that we
can launch onto the web using Laravel.
Amazing. But you can now use that same
language and that same set of things that
you've learned to build apps that you can
bring to the App Store and to the Google
Play Store with Native PHP for Mobile v1.
So huge release on that front, um, and,
uh, really excited to see what people are
building, uh, with this new, um, library.
Okay.
The big one here, Laravel Nightwatch, was
also released. So I, in particular, am
more, was more excited about Nightwatch
than I was about Cloud. I've got a lotta
stuff that I- I already have running
inside of Forge that I've been really
happy with and have not needed necessarily
to switch to Cloud, but Nightwatch is one
of those things that I could add to every
single one of my projects. So it's a
first-party product with deep monitoring
and insights for all of your Laravel
applications, no matter where you deploy
them, and, uh, you can get started by,
like, checking out nightwatch.laravel.com.
Really, really cool. Tailwind version 4
was released. Of course, the community has
been largely behind Tailwind for a long
time. Adam Wathan, long-time Laravel
community member, uh, who created
Tailwind, of course. And so on January
22nd, Tailwind version 4 was released with
a brand new high-performance engine, CSS
First configuration, simplified
installation and more, which we have a
release post that you can read about
there, um, in the blog post here. Of
course, there's plenty more to come this
year. Uh, we've got Laracon US right
around the corner from July 29th to 30th.
Hopefully, we'll see you there. Expected,
uh, to announce some new updates to
Laravel Forge, which I'm really excited
about. Livewire 4 was also mentioned to be
released, uh, hopefully at Laracon US
2025 live from the stage. We've got
Laravel Live Denmark coming up in August.
We've got, uh, Laracon AU, of course,
November 13th to the 14th. Uh, an
opportunity to learn and share and connect
with like-minded people, level up your
skills, knowledge, and Laravel
applications. You can still grab tickets
for that. And then, of course, November
20th of 2025 is when PHP 8.5 launches, so
we're gonna talk about that a little bit
more in the show as well. That is our
first half of the year. Looking forward to
the rest of the year. It's gonna be a
good one.
Yeah. Lots, uh... A lot of big stuff
happened in the, in the front half of this
year, so it's gonna be interesting to see
what the, uh, Laravel team in particular
has been cooking up,
uh, in that time on top of... Obviously,
they're much bigger now, so they have the
capacity to do a lot more things. Um, and,
and as you say, Nightwatch and Cloud
launching in the, in the first half of
this year, not, not small things by any
stretch. So to have the capacity to do
that, to launch that, to maintain that,
and, you know, to look to the future as
well. Taylor's got a two-hour keynote this
-year on the first day, so-
-Yeah. Yeah. It's gonna be crazy.
Uh, looking forward to that. On- on that,
the, the schedule for Laracon US is up now
as well, so if you hadn't seen that, uh,
if you didn't see the email or if you
haven't seen online, check that out. Uh,
there's a lot of cool stuff, interesting
talks on the horizon for that.Another one
that I really enjoyed and immediately, uh,
upgraded was the ability to run Laravel
Pint faster in parallel mode. So it was
recently updated with a new --parallel
flag that makes Pint run 40 times faster
and will fully leverage the parallel
capabilities of phpcs-fixer. You can use
it using /vendor/bin/pint --parallel. The
flag is marked as e- experimental and is
potentially unstable, but to access this
flag, all you need to do is update to the
latest version of Laravel Pint, uh, at
least version 1.23.0.
Along with the --parallel flag, this also
allows extending a Pint configuration from
another file. This is useful if you have
an organization Pint config you share
across projects, however, want to tweak a
few settings on a per project basis.
Um,
yeah. Big- big fan that being able to run
and leverage multiple processes,
especially in things like CI to try and
get those processes to run quicker, you
wanna get feedback in those cycles as
quick as possible, so shout out to Nuno
and the Pint team for that one.
Awesome. Uh, speaking of NativePHP, which
we just mentioned about the first half of
2025, uh, since they launched NativePHP
for mobile in May, they've been building
fast and quiet, running, uh, and refining
the core, creating better tooling,
expanding what was possible with it. So
version 1.1 drops July 14th, which is
today, the date of this recording, and it
isn't just like a collection of fixes.
It's really a foundation upgrade to make
these apps easier to build, faster to
ship, and ready for real production work.
So let's talk about a couple of the things
that have been brought to 1.1. First is
modular
native APIs. Here's what we mean by that.
Previous to this, everything was sort of
stuffed under this system class. We had
system, uh, you know, double parens, and
then you could get to all these mod-
these, uh, native APIs, like biometrics or
camera, dialogues, geolocations, things
like that. No longer do you have to do
that. They all have their own dedicated
facades, so you have biometrics under its
own namespace. Camera, dialogue,
geolocation, haptics, push notifications,
secure storage, and then system. So each
one is designed by itself to be
predictable, documented, and then easy to
expand. So this sets the tone for all
future native features, pulling them into
their own facades so they can be really
focused and testable rather than having
them all crammed under one spot. There
also are a couple new features, secure
storage, geolocation, and gallery picker.
So these are new native capabilities that
you have access to. Secure storage allows
you to store tokens, secrets, and
credentials using that device's native
keychain or keystore, which is incredibly
powerful. Of course, geolocation is a big
one if you ever need accurate location
data, so you can now ask for that in the
permissions support. It's cross-platform
supported, which is excellent,
and then gallery picker is when you allow
users to select media that they want your
app to be able to access. If you've ever
used an application with modern, uh,
privacy focus, you know that it needs to
gain permission to not... You know, it
used to be, "Do you give us access to all
your photos?" And you had to say yes or
no, and now you can be more selective in
which things you want to share. This
gallery picker is essentially that. So
they're now fully integrated into Laravel,
no plugins, no separate workfl- flows,
just these really powerful APIs that you
already understand.
ENV handling was also something that was
annoying. Previously, in Android, if you
ever changed the ENV values, you had to
run PHP artisan native_installforce. This
was a destructive step, so it wiped your
entire project and required you to rerun
that native run. You don't have to do that
anymore. They've now moved all that logic
into native_run。 So when you update that
ENV, it changes the whole thing without
deleting anything. Uh, so fewer surprises,
no wasted time. Uh, same as what it was
in iOS, that's now the same in Android
now. Okay, couple of things that sound
less exciting, but they're actually
allowing you to do some really cool stuff.
Full CLI flag support. So version 1.1
introduces this ability to allow you
to pass those flags to that native_run
function, unlocking true automation. What
do we mean by that? You can now run these
native PHP actions, uh, sorry, these
native PHPs, uh, functions in GitHub
Actions in your deploy scripts or in your
staging pipelines so that you don't have
to have prompts or manual steps built in
there. You just pass the flags, and it
sort of does it silently for you. Really,
really nice.
Also, a undersold feature here, smaller,
faster binaries. So in Android, they went
into their PHP build, and they cut it in
half, essentially, from 16 megs down to 8
megs. Um, in Android with ICU, from 44
megs down to 35 megs, and in iOS, they cut
it in half as well, 55 megabytes down to
22 megabytes. So faster downloads, lighter
binaries, li- lighter bundles, and better
performance. Uh, so really, really good
stuff there. Um, there are a couple other
items, uh, including rewritten
documentation, uh, real testing
infrastructure with unit tests and
end-to-end tests. Uh, there is a Kitchen
Sink app that's now live on the Play f-
Play Store, so you can take a look at some
of these features that we just talked
about, secure storage, geolocation,
gallery picture- picker, uh, that you
could download and kinda check that out on
your device to see how that feels, and
then, uh, you can, uh, take a look at the
merch store that they've also launched,
which is shop.nativephp.com.
Whoo, bunch of stuff there, all available
to you as of the time of this recording.
If you're using that, you should
definitely upgrade. Uh, it's a good one.
Thanks so much to Shane Rosenthal and the
team over there for writing this one up.
Next up, the Laravel Claude A-... code
setup repo is a one command setup for
AI-powered Laravel development with Claude
code and MCP servers. It will help you to
automatically configure all MC- MCP
servers for the ultimate AI-powered
Laravel development experience with Figma
integration. The Figma integration
features seems like they could be very
powerful, helping you automatically create
views, extract design system, build
components, and more.
Uh, main features include global MCP
servers that are shared across all of your
projects, GitHub integration that
accesses all your repositories to manage
PRs with automatic token configuration, a
memory system to remember decisions across
projects, Context 7, which is the latest
Laravel ph- which provides the latest
Laravel and PHP documentation access.
There is web fetch for accessing external
APIs and resources, Figma integration to
provide design-to-code workflows with
automatic design token extraction,
automatic design token extraction ,
providing colors, typography, and spacing
for Tailwind CSS, and a Laravel debug bar
providing real-time debugging if
installed, and more. Uh, it's pretty
simple to get up and running. There is a
curl command that you can run through
Bash, um, and then, uh, get everything up
and running.
You can get started with the package by
reading the readme and the docs folder,
which we'll have links to for you in the
show notes.
Well, hey, folks. We talked about a little
bit earlier that PHP 8.5 is getting
released in November 20th of this year, so
the next couple items that we have here
are all related to Laravel, sorry, not
Laravel, PHP 8.5. So, this first one is
written up by Paul Redmond, everyone's
favorite human, really good, and he talks
about, he- he goes into quite a bit of
depth on this. I'm just gonna skim the
surface on this one, and if you want to
read the additional details of it, please
feel free to go and read it. But the- the
headline is this, array_first_ and
array_last_ functions are being made
a reality inside of PHP 8.5. So,
this has had user land implementations and
polyfills by Symfony, by Laravel, by
other things, uh, throughout, you know,
forever, right? These- these
complement some things that were already
pulled in in PHP 7.3, which were
array_key_first_ and array_key_last.
But again, without going into too much
depth as far as how it works and how these
polyfill works, just know that
array_first_ and array_last_ will now be
available to you natively inside of PHP
8.5 in November.
-Perfect.
-There we go.
The pipe operator is also coming to PHP
8.5 when it will be released on November
20th. The operator is an exciting prospect
for PHP developers wanting to chain
multiple callables together, passing a
value through them from left to right in a
native way.
The pipe operator
accepts a single parameter callable on the
right and passes the left side value to
it, evaluating to the callable's result.
Now, if that doesn't make much sense to
you, any time you have used Laravel's
collections and chained on a filter and
then a map and then a first- or whatever,
this is a similar concept but supported
natively within PHP. So you can get a long
way to do things like
running a string through HTML entities and
then string split and then mapping to
uppercase things and then filter the
values, all using native PHP functions.
Um, the p- performance benefits would-
would be the main thing to do this, having
this functionality native. I wonder if
any of the Laravel connection stuff, uh,
collection stuff can be adapted to maybe
leverage this functionality under the
hood/behind the scenes. Uh, but it does
mean that there will be situations where
you can sort of map and filter and reduce
using the native pipe functionality in
situations where nec- you don't
necessarily have to reach for the
collection functionality. So,
uh, definitely check that out. Uh, it will
be released as part of PHP 8.5 in
November.
That is incredible, honestly. I- I just...
It feels like these things used to only
be...
They only existed in some
parallel universe where PHP was willing to
accept these sorts of things. And I feel
-like-
-Mm-hmm
... in the last couple releases, like, the
dam has broken and all of these amazing
new features are flooding in, and it just
feels like it is such a wonderful time to
-be a PHP developer, doesn't it? I mean-
-Yeah
... there's just so many cool features
that we get. And not only that, but we
have the community keeping us updated,
'cause that was some of the other parts of
it too, is I feel like it used to be that
Laravel... Oh sorry, not Laravel. PHP
-releases would kind of come and go-
-Mm-hmm
... and nobody was really any the wiser as
far as what the new features were. They
had, maybe there were some break/fix
things stuff in there, but there was none
of these new sort of banner features that
were coming out that people wanted to
upgrade to get. And this is one of those
big ones, the pipe operator. That's so
cool. Now, the syntax is really
interesting. I think it looks good, it's
-just gonna be weird to get used to.
-Mm-hmm.
It's sort of... You know what I mean? I'll
have to kind of go back and go, "What-"
-It's very uncharacteristic for PHP.
-Yeah. Yeah, exactly. Like, what was that
-operator again? Pipe arrow?
-Yeah.
-Okay.
-Yeah.
Like that's just... You know, it's
interesting. I- I think it's a good one,
-right? It's-
-Yeah.
-You know?
-I think it's borrowed from, like,-
-I think it's got to come with this-
-.Dot Net or something like that.
-Okay.
-Or- or C Sharp. So it's... Yeah, it's,
there's- there's an established... And a
lot of the stuff that
PHP has been adding in recent times
does have
a history in other languages. And so it's-
it's easier to kind of
have something familiar for people that
move between languages, perhaps, when you
look at what's already out there before
implementing. I think the- the- the big
thing is, well,
not so much, you know, not wanting to do
things or not bringing things in because
Symfony had it or because P- uh, Laravel
had it, or whatever else. I think the-
the- the main reason
is because the PHP Foundation exists now.
That there is people that are actually
paid to develop and support PHP the
language, and they're doing this in a full
time capacity. That there is now active
community support...... to, you know,
enable people to work on this, not just in
their free time, not, you know, whenever
they're, they're a- able to, but to do it
in a full-time capacity. And that, I
think, has s- you know, moved a lot
forward in terms of the ability for PHP to
manage releases, to communicate releases,
to, to do more exciting things more often
and more regularly than, you know, what
we had before. So shout out to everyone
that is involved in that.
Absolutely. Well, uh, along with all of
this, you might be asking yourself too,
like, "How can I get started just testing
out PHP 8.5? What's the easiest way for me
to do that?" Well, we're gonna talk about
that a little bit here, but we're also
gonna talk about another feature that 8.5
introduces, which is a diff option
for the PHP INI flag. So
PHP-- INI previously would show you, hey,
here are the values, um, that are loaded,
uh, as well as maybe showing you here's
the path that you're loading it from. Um,
but this, uh, there's a couple cool new
things here, um, that are, are going to be
available to us starting in 8.5. So
you can use this diff, uh, to show you the
INI values that are different from the
built-in default values. So if you do
PHP-- INI=diff and it says, "Here are all
the loaded values that were made to be
different based on INI files that you were
loading in." And sometimes that's not
always easy to identify either. Where are
my loading these INI files from? Am I
loading multiple INI files? And so, uh,
Paul Redmond talks about how you can go
through and get a little taste of this as
well as, uh, mess around a bit with being
able to see not only what ones are
different, but where am I loading them in
from? And so he talks about specifically
here using Docker. Now, Docker is one of
those things some people don't really like
to get involved with it, and me being one
of those, raise your hand. Um, but he
talks about how you can use Docker in
order to be able to set up a new PHP 8.5
demo. And then he shows, here's how we can
see what the INI values are before, and
then here's how we can see what it looks
like after we load these, uh, INIs. And
then we can also see here are any loaded
configuration files, which is gonna point
you to all the INIs that got loaded in
order to produce that difference between
what the default values are and what your
new values are. So if this is something
you'd like to play with before 8.5 was
released, this is a great tutorial to go
through.
It's not a long one. We're talking about,
uh, 10-minute read here, right? From
actually getting it, started reading it,
to actually getting through the end of it
with a, a, a Docker 8.5 install. So should
be a good one. If that's something you'd
like to play with, definitely check that
one out.
The last PHP 8.5 feature we have to talk
about today is fatal error backtraces. In
PHP 8.5, a new fatal error backtraces
setting can control whether a backtrace is
shown for fatal errors. Fatal errors
without backtraces in today's stable PHP
versions, for example, 8.4, might include
parse errors for syntax errors, duplicate
functions or classes, infinite loops, and,
uh, max execution time and so on.
So if you run code in PHP 8.4, you'll get,
uh, if you try to declare a class
multiple times, for example, you'll get a
fatal error that says, "Cannot declare
class B because the name is already in
use." And it will just tell you where that
error happened. Starting in PHP 8.5,
you'll get more helpful information that
led to the fatal error. Clearly, this is
derive, uh, this is a, a contrived
example, but it will tell you where
the duplication happened. It'll give you,
uh, it'll tell you, this was previously
declared somewhere else, rather than just
saying that it has already been declared.
So, uh, the ini setting default value is
to show fatal error backtraces, meaning it
is enabled by default. But if for some
reason you wanna turn it off, you can set
that setting to 0 and you'll get back the
current state of affairs. Uh, we have
links to this and all of the PHP 8.5
updates in the show notes for you.
Okay. Moving on to packages. So this first
one, I was confused when I read it for
the first time because it says Volt in the
title.
-Mm-hmm.
-Laravel performance testing with volt test
PHP. Now if you were naive like me and
you think, oh, Laravel Volt, which was
introduced at, I think, like, Laracon 2023
US, I think, is where it was at? Um...
-It's been around a while. Yeah.
-Somebody talked about this, right? Which
is, like, um, these, like, LiveWire
components and, like, single, single file
component things. Not what we're talking
about. No need to really continue down
that path. This is talking about volt test
PHP, which, uh, if I'm reading its, in
its own title of what it claims to do, it
empowers developers to write and execute
performance, load, and stress tests for
their applications directly inside of PHP.
So what the Laravel performance testing
package does is this allows you to
use the volt test PHP SDK to create these
load tests for your Laravel applications,
uh, which some of the niceties that it
sort of folds in here is things like route
discovery, CSRF handling, reporting, and
more. So using the Laravel package, uh,
that we're talking about here, you can
quickly get up to speed using that volt
test, generating test files easily, and
starting to stress test your Laravel app
if that is in fact something you need to
do. The API looks really nice. You
basically set up a scenario and you set up
different steps that you'd like to test,
and then you can, uh, build it all out s-
very... In, in a fluent interface, uh,
very similar to how you'd build out... uh,
what you would do when inside of a PHP
unit sort of request life cycle. Here are
the things I want you to do, and then you
can go through, filter it out only to
particular, uh, tests that you want to
run, and then do your stress test there
with PHP Artisan Volt Test and run that
there. So it's easily, uh, configurable,
automatic route discovery, comprehensive
reporting, URL load testing. It comes with
artisan commands, configurable, uh,
through flexible config options, and then
it also has things like CSV data sources,
which you might think is, like, "W- why
would I need to do that for?" Well, if
you're wanting to load a bunch of
different data into these stress tests,
it's gonna require a large amount of it to
kind of run through for realistic
performance testing. And so, a lot of
times you're going to load that in through
some sort of CSV data source. It supports
that. So you can check this one out in
the show notes.
Intelligent parsing and formatting of
names in PHP apps. Uh, if you have ever
done anything that deals with a customer,
you know, like a CRM type thing or
anywhere where you're displaying names of
people, where it can be arbitrarily
entered into forms, Name of Person is a
PHP package inspired by Basecamp's Name of
Person Ruby Gem, which gives you
intelligent parsing and multiple
formatting options.
If you handle, uh, sorry, handle person
names in your PHP applications with
elegant formatting options, transform
names between multiple presentation
formats, the package provides a clean type
safe way to parse, store, manipulate, and
display person names consistently across
your application. So you can directly
instantiate a person name with a first and
last name as separate parameters, or you
can use static constructors for, uh, you
know, person name from full, and then you
can, from the parsed object, return the
first and the last name. It handles single
names as well. So if you had, say,
"prince,"
uh, you would get null back for the last
name. The package also has Laravel support
for cars that you can use with your
models, and the car support string based
cars configurations, as well as a fluent
method and JSON serialization.
Multiple format options are available.
There are nine different ways to display
names. There is full, familiar,
abbreviated, initials, sorted, possessive,
and mentionable. There is smart parsing
to intelligently handle full name strings
and edge cases. There is full
international name support with proper
multi-byte handling. Core functionality
means it works in any PHP project, and a
specific viral integration provides native
eloquent casting for seamless database
integration. So he talks about, um, you
know, familiar and initials and, uh,
possessive formatting options. So if you
had, um, Eric L. Barnes, as he likes to
sh- pla- place his name around the
internet. If you said that was his name,
then familiar would be Eric B., um, you
know, with a, with a sh- Initial for the
surname. Uh, initials, you could say name
initials to get E-L-B, to get the initials
of all of the names. Possessive for the
first name, so Eric's, Eric apostrophe S,
and so on and so forth. Uh, this is
useful, you know, if you're
sending emails to people, you might wanna
address them in a-
-Hmm. Good point
-... e- with a possessive. You might want
to, um, generate avatars if they haven't
uploaded an image with, with the initials
for their name and so on and so forth. So
definitely check this one out. Uh,
something that
we do in a number of different places, I'm
sure there are many of you listening who
have implemented these in various
different ways. Um, I know a favorite of
mine to get the first and last name is to
do, like, string of before space, and
-that's the first name-
-Yeah
... and string, string of after, you know,
that space means it's the last name. And
you can get caught out in places if people
have put in, like, a middle name or, or
things like that as well. But
a tested package that's built on top of or
off the, the work of Basecamp's Ruby Gem
means that
it's comprehensive. It's tested over a, a
long, long period of time. So definitely
check that one out.
Awesome.
Uh, last package before we get to to... To
these tutorials here. Uh, Laravel AI Chat
Starter Kit created by Pushpack Chahed is
a modern starter kit that features real
time streaming responses using Prism,
Inertia, Vue, and Tailwind CSS. Okay.
Don't sleep on this thing. Let me, let me
kind of put this down for you here.
If you are wanting to interact with an AI
model and you also are responsible perf-
for, for providing the interface that
allows you to interact with that model, as
well as stream back the responses, this
is a starter kit for Laravel that gives
you everything you need to get up and
running with that from zero really
quickly.
As I said, it's a starter kit. So as of
Laravel 12, we now have these starter kits
that you can ship things with. So to get
started with this, all you do is Laravel
new, and then you use PUSHPACK1300/AICHAT.
That's it. And it will give you all of
this ready to go. Real time AI responses,
which are streamed as they're generated.
Reasoning support, so it has support for
AI models with reasoning capabilities. I-
it allows for multiple AI providers. Thank
you, Prism. AI, OpenAI, Anthropic,
Gemini, Ollama, Grok, et cetera. All those
things. It has a built in authentication
system for user authentication and
management. It has a light and a dark
mode. It has custom theming with ShadCN.
So if you've not used Sha- ShadCN before,
uh, you know, this is something that's
usually... It was kind of created
originally for React, but it's been ported
over to Vue. So now you can do easy theme
customization with just simple CSS
variables. Really nice there. And then
also allows you to do chat sharing, which
is, uh, allowing you to share
conversations with other users. This is
something that ChatGPT has done in the not
too, um...... re- you know, not too
distant past, which has been really
helpful for myself. Specifically, I'll-
I'll write something up, wanna share it
with my wife. I either have to copy and
paste this whole conversation or I can
say, "Just share this over to this
person," and it kinda gives them the
entire context. So a really, really
comprehensive starter kit here, as well as
shipping with an enum that specifies the
model names that you'd like to use. So,
you know, you've got GPT-4-0-mini- mini,
and GPT-41-nano, and 04-mini. And
if you didn't know the names of these or
how they're specifically... It's sort of
like when you're doing regions for Amazon.
It's like, was it US, ES- US East 1 or
East 2, or which one was it? This just
kinda simplifies that for you by providing
an enum that has all those values ready
for you to go to plug in. So if this is
something you've needed to do, even if you
just wanted to play around with Prism,
this is a great spot for you to just grab
the starter kit, spin it up, and give it a
try. So really, really cool here. Thanks
to Pushpack and Chahajed for, uh, creating
that. Very nice.
Nice. Uh, several tutorials this week, all
of them from our favorite, Harris
Raftopoulos. All of them framework
reminders, if I have classified them
correctly. I'm gonna run through them all
and leave them to you, dear listener, to
go forward and read them. First up,
simplifying stream handling with Laravel's
resource method. We've got dependency
injection in Laravel closure commands,
Laravel's inarrayKeys rule allowing you to
validate partial array keys, content
negotiation with Laravel's prefers method.
There is Laravel request content type
inspection methods, as well as blade
authorization directives for Vue security,
enhancing JSON responses with Laravel's
modelappends property, enhanced Enum
processing with Laravel's default
parameter support, custom object casting
in Laravel models, and Laravel's
ruleContains method for fluent array
validation. All of these things that we
have spoken about at various points in
time on Laravel News, and Harris, as
always, has helpfully gone through and
just expanded on the high-level stuff that
we talk about on the show to give you
more context around how you might use some
of this functionality in your projects.
Yep. They are actually so well-written,
and he does a really good job breaking
down the high-level things that we're
talking about. When we're talking about
release things, a lot of times it's just
the bullet point version.
-Mm-hmm.
-Here's the feature, top level. And maybe
you don't have as much of a grasp on, "How
exactly do I use this inside my
application?" Or, "What are some examples
of places where I might use this?" He
takes all those and expands them to a full
tutorial and provides, uh, details on all
of that. Really well-written, really easy
to follow, and most of them you could
read through and understand within, I'm
talking five minutes, right? You should
definitely go through these, read these on
a lunch break. It's gonna be really
helpful. And there's so much stuff that's
going into the framework these days, it's
easy to lose that there's some of these
amazing things that you have never even
heard of, right? Even if you read through
the documentation, you might not know that
these things exist. So definitely check
these tutorials out. They're super val-
super valuable and are gonna help you
level up to the next
level. And also, speaking of,
if you're interested in leveling up to the
next level and you are over on the side
of the world, uh, where Australia is near
you, you should definitely be grabbing
your tickets to Laracon AU. Michael, give
us some dates that we should be looking
-at.
-Yeah. November 13th and 14th in Brisbane
this year. Um, we have sold over half of
our early bird allocation as well, uh, and
that will run until the 7th of August
unless sold out earlier. So if, uh, if
you've missed the boat on Laracon US,
then, uh, Laracon AU is happy for you to
join us. If you go to Laracon US and you
think you want some more Laracon in your
life, there will still be about a week to
grab your early bird tickets after that
happens. So I'd love to see you there.
And, uh, we're- we're in the thick of
announcing speakers at the moment as well.
So looking forward to getting all those.
It's one less secret I need to keep from
the community , so definitely enjoying
this part of, uh, the preparation process,
for sure.
Absolutely. Hey, folks. Michael and myself
will also be at Laracon US this year,
which is coming up right around the
corner. I think both of us will be there
on the... Ooh, let's see.
-28th.
-28th? Yes, we'll both be on the 28th. I'll
be there through the 31st. Please say
hello. We would love to see you and hear
from you. It's always great to, uh, hear
from people who are able to listen to the
show, and very much looking forward to
catching up with all you lovely folks
there. This has been episode 241. You can
find show notes for it at
podcast.laravel-news.com/241. Please rate
us up in your podcatcher of choice. Five
stars would be amazing if you enjoyed the
show. And of course, any comments or
questions you might have, hit us up on
BlueSky or on X @MichaelDerenda,
@JacobBennett, or @Laravel News. Folks,
until next time, it's been a fun one. We
will see ya.
Bye.
Creators and Guests

