Local errors, pretty PHP, and terminal UIs
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 Derenda.
Hello, folks. Welcome to the Laravel News
Podcast. My name is Jake Bennett. With me,
as always, is my wonderful cohost, Mr.
Michael Derenda. We are on episode 246. It
is September 30th, 2025. No pre-show.
Folks, if you want pre-show, you have
to talk to us. Say something on X or on
BlueSky. Just say anything-
-Mm
-... and we'll bring it back. And if you
-say nothing-
-Bring it back
... then we're just gonna keep it like
this.
-We're never gonna do-
-Is that not fair, Michael?
-... a pre-show again. Yeah.
-No pre-show.
-Find another podcast.
-That's right. No, don't. Just stay here.
No, no. Stay here, stay here, but we'll go
straight into it.
-Stay here.
-Ready? There is a new, there is a new-
-Go ahead
-... local error page in Laravel 12.29.
Ryuta Hamasaki and Jeremy Butler created a
brand-new local exception page for
Laravel applications. The new exception
page retains the Copy as Markdown button
that was released in 12.25 and removes
manual dark-light toggles in favor of
automatically detecting light and dark
mode. Uh, you can see pull request
57,036 for details. Uh, this is very nice.
It leans, I think, very much into the,
the kind of design language that they've
got inside of Nightwatch. So there's some
consistency there between what you see
locally and what you will see
in Nightwatch if you are using that for
your error monitoring on your Laravel
applications. Uh, Joel Pedro Lopes, along
with various community developers and core
Laravel team members, contributed a
cache-session driver. It is best to read
through the discussion and code in pull
request 56887,
but an example from that is talking about
sticky database connections across
requests. Now, I saw some discussion about
this. Why would you use, um, session for
cache, and things like that? The benefit
of using the session driver for your cache
is that it is tied to your user's
authentication session. So you don't have
to worry about cleanup and things like
that. As soon as they log out, then
obviously that cache is, uh, expired. So
this is very useful if you need to for a,
for example, a multi-tenant context, you
wanna switch the database connection and
have a, a c- persistent connection, for
example. The, the example in the pull
request goes more specifically into a
sticky database connection. So, if you've
got reads and writes split, it will, um,
set all of your writes and reads to share
the connection, just to make sure that you
don't have any latency between, um, reads
and writes there. So definitely look into
the pull request for more detail.
Can I interrupt, two seconds? So we
actually-
-You may
-... have this exact problem on our, um...
I'm salary, so it doesn't matter as much,
but for the people who have to clock in
and out, first people... Like people who
are just getting started at our company,
when they go to clock in, and they're
like, "It didn't happen." Like, "I c- I
pressed clock in, and then it doesn't show
as a clock in." Like, and then it's
eventually consistent, but the problem is
that it's using a separate database. It
goes and hits one of the databases, and
then eventually it gets around to syncing
the back, with the database that they're
actually viewing. And so it's-
-Yeah
-... very annoying. You have to explain to
them, "No, no, no. You click it once.
Don't click it three times until you see
-it."
-Yeah.
-Like, just click it one time.
-Yeah.
-It recorded.
-Yeah.
It's just not gonna show up immediately
because it doesn't use this, right? It
doesn't use sticky sessions. It doesn't,
you know, pin you to a database. It
basically just says, "Just write to
whatever one and read from whatever one,"
-and it's super annoying. So, anyway-
-Yeah
... this is a really cool contribution.
Love this.
Well, sure. Next up, Luca Patera
contributed the ability to define custom
resource classes directly on a model using
PHP attributes. And using these
attributes, you can avoid boilerplate when
converting a model to the intended
resource.
So previously, you had to say, uh, you
know, Model.toResource and then pass it
the class string that represents that, or
to a resource collection and the class
string of that. Now you can just call
toResource or toResourceCollection on the
model or the collection itself, and then
you can use useResource or
useResourceCollectionAttributes on the
model itself to define the class string
-for what those are.
-Very nice.
-So thanks-
-Love that
... to Luca for that one. And lastly, in
this release, Danny Foster contributed a
JSON flag to the scheduleListArtisan
command, which will return the data as a
JSON, uh, object, which is useful for
monitoring deployments and integrations.
So this is fantastic if you will, you
know, need to send that data somewhere, if
you're monitoring that things have been
run or when they should run and things
like that, which enables neat commands
that are piped to things like jq for
monitoring to ensure scheduled tasks exist
during a deployment. So we'll leave that
up to you, dear listener, to delve into
further, but that is all for 12.29.
Very cool. Hey, for those of you who
happen to be using Inertia, Infinite
Scroll is now available in Inertia version
2.2. This was released with this new
Infinite Scroll component, and this will
likely be a huge time-saver if you, dear
listener, have ever had to build an
Infinite Scroll feature by hand. Uh, this
update introduces this new Inertia scroll
method. And good news, it works seamlessly
with Laravel's existing full, simple, or
cursor pagination. So it's not anything
brand new you have to do in Laravel. It
works the exact same as the rest of it
does. You now just wrap it in that Inertia
scroll on the server side. On the client
side, you wrap your content in this new
Infinite Scroll component. So, the really
cool things that this offers you, um, is
that it works, number one, with Vue.
-...
-... you know, React, Svelte, it's got a
component for each of 'em. Uh, it will
also update the URL as you scroll down the
page. So if you're halfway down the page
and you want to share that link with a
friend, you copy the URL, paste it to
them, and it'll land them in the same
place on the page that you were at when
you copied the link.
-That's cool.
-Scrolling back up the page also updates
that URL. So it's not just as you progress
down through, it'll also, as you progress
back up through it, it will, it will
update the URL as well. Um, if you happen
to jump to a particular location, paste
that URL, it will backfill those pages on
a, um, oh, sorry, those earlier pages on
the page refresh. And then it also has
bidirectional scrolling outta the box,
including reverse mode. So you can say,
"Scroll up to load the next page or scroll
down to load the previous pages." I'm not
sure why you would do that, other than
sort of Apple has that, like, natural
gesture-
-Mm-hmm
-... um, sort of thing. I- I'm not sure.
Maybe that's why. I- I don't know exactly.
But in any case, it's possible.
Configurable flexible options as you would
assume. There's also manual mode for
complete control of the load- loading so
that you can, um, really dig in and
configure that exactly as you'd like to.
Uh, there is infinite scroll documentation
in the Inertia docs as well, so you can
check that out. Really cool addition. I
know I've seen a lot of people talking
about this on Twitter, Taylor included,
and so this is a really, really nice one
if you've had to do this by hand before,
-no longer. Now you can use this-
-Mm-hmm
... infinite scroll straight in Inertia.
Love it. Really cool.
Yeah. Shout-out to Pascal and the team
that- that have been working on this. It's
very cool that, you know, a- as Laravel
has taken on
ownership of Inertia, the project, and
they can dedicate time and resources to
it, it's really cool to see the
progression. You know, it was always
considered, like, a feature-complete thing
from Jonathan's perspective, I think,
because, you know, he- he didn't really
have time to- to work on it. So the fact
that
Taylor and Laravel saw that there was more
to be done and that they had the
resources to g- dedicate to it, now we're
seeing the- the fruits of that labor. So
shout-out to everyone involved in keeping
Inertia, uh, performant and- and
functional and- and living and breathing,
so
very cool. The Laravel team launched a
public beta of the Laravel
MCP package, which is a package to
rapidly build model context protocol
servers for your Laravel applications.
Laravel MCP joins Laravel Boost as a
first-party tool that makes working with
AI in Laravel a joy to build. So the MCP
package itself will provide you a
framework for AI clients to interact with
your application, defining routes,
servers, prompts, and more. Servers define
the central communication point to
provide capabilities such as tools,
resources, and prompts, and there is an
example of a current weather tool in the
documentation that gives you a quick taste
of building with Laravel MCP. You define
a handle method and a schema method, so
very familiar stuff if you've built jobs
or anything like that in Laravel. Laravel
MCP is released to the public as a beta
version, but it already feels like a
polished Laravel package, and it feels
very much like building MVC Laravel
applications. We think that the package
itself will help the Laravel community
product- productively build MCP servers
that are not only a joy to use but also to
build. With the beta release, there are a
lot of resources to get started, so check
out the Laravel MCP documentation, the
MCP repo. There is a demo application
called Locket. There is a web demo app in
Laravel Cloud. There is the announcement
post from Laravel, and there is a video
from Nuno Maduro, uh, who worked on this
with Ashley Hindle, I believe, uh,
introducing Laravel MCP. So we have links
to all of that for you in the show notes,
of course.
Um, can I just make sure... So for those
of you who are, um, with me sometimes, you
know, thinking about like, okay, you hear
MCP, what exactly are we talking about
here, right? To be clear, this is allowing
you to
define tools and endpoints for your
Laravel application that would then be
exposed as an MCP for LLMs to interact
with. So if your application provides
some novel sort of tools that you would
like to expose, um, you can do so using
this tool. It allows you to... It- it sort
of, uh, has conventions around how you
should structure these things and how you
should expose those as an MCP server. So
that's the idea here. You know, I know
there's a lot of talk about some of these
things. What exactly is this one? That's
what this one is.
-Mm-hmm. Yeah.
-But it- it, you know, really, it, you
know, it's built by the, by the Laravel
team, so you can say that this would be
the Laravel way to build your own MCP
server.
-Mm-hmm.
-So, um-
-Yeah
-... well done by the team there, and
really excited to check that one out.
From- from my perspective, I understand
what this is and what it enables.
-Mm-hmm. Mm-hmm.
-What I don't understand is why you would
do it. If you could explain to me why I
would want to provide an AI interface for
someone
sitting in their cloud or whatever to then
talk to my web application, I would like
-for you to explain that to me.
-Okay. I c- can I take a shot?
-You can try.
-Okay. So let's say that I have an
application that I'm building that allows
clients... Let's- let's just, let's define
them as insurance carriers, okay? Those
are the people.
-Mm-hmm.
-They're wanting to deliver their claims
to a vendor on the outside, okay? So my
application sits in the middle between the
-insurance carrier and the vendor.
-Mm-hmm.
I
take aggregate data from the insurance
carrier and documents and things like
that, and I format them into a consistent,
um, data structure that I can ingest from
any insurance carrier, and I sort of
standardize those fields for vendors to
then take and work with.
It's possible that I would want the vendor
themselves, instead of just using APIs to
be able to interact with that data, I
want to expose to them an endpoint where
they can ask questions about the inventory
that has been assigned to them from that
insurance carrier, for example. So they
could say, "How many claims do I currently
have outstanding?"They could ask that
question from the LLM, and it would be
able to use the tool that I've exposed to
say, "Here you go. This is how many you
-have." Or-
-Right
... "How many claims do I currently have
assigned that have a balance greater than
$10,000?" There you go. Right? And so it
could, it could interact with it that way.
I suppose that would be maybe a valid use
case for, for why-
-Yeah
-... you would use something like this.
-So then-
-With natural language-
-Someone on the other-
-... queries almost, sort of.
-Yeah.
-You know? Like...
-And then someone on the other side-
-The vendor would have to-
... has to then link that up with your MCP
server.
Right. Correct. That would... That's
exactly right. Yeah. Somebody... They'd
have to have somebody sophisticated enough
on their side to say, "Okay. We have an
L- LLM, and we need to hook it up to your
MCP server." And yeah. Away you go. Um, at
-this point-
-I think-
... some of it I feel like is, like,
marketing speak too. So, like, you can
-say-
-Mm-hmm
... "Hey. We're j- you know, we're
releasing an MC- MCP server with our
particular service as well." And some tech
head's gonna be like, "No way. You guys
are ahead of the curve. You're
releasing..." You know. I don't know. I
-don't know.
-Yeah. Yeah. Very interesting.
I get what you're saying though too. Yeah.
That's, it's like, "Hmm."
I'm sure one day... You know, it took me
three years to figure out what this is all
about, so I'm sure one day in about three
years someone will show me something that
-makes me go, "Oh. Okay."
-Ah. That's it. That's it. Right. For sure.
Okay. Speaking of things that are being
released, Filament 4.1 is here. Really
excited to announce this one. Since 4.0
was, was released, the core team and
community have been really hard at work.
There's been 156 bug fixes that have been
merged and 39 brand new features. So we're
gonna go through a couple of the new
features in 4.1, some of our favorites.
There is a new panel layout. So in the
traditional layout with Filament, you'd
have a top bar, you'd have a sidebar, and
then you'd have the main content. You can
now do it no top bar. So this is perfect
for apps that really, um, need all of that
ma- all that vertical space, right? They
wanna maximize the vertical space there.
So the user menu, notification button,
global search, they get moved to the
sidebar, which then opens up some
interesting, uh, you know, theming
possibilities, if you will. So, um-
-Mm-hmm
-... it looks really good. There's a
screenshot and a little video demo in the
blog post here. You should definitely
check that one out. Shout out to Nolan
Nordlund for his time that was spent on
that feature. There also is some
interesting things that are available
inside of their Rich Editor. So their Rich
Editor is like this text field.
Think, like, Tricks, right? Um, you know,
you have bolding, italicize, all that sort
-of stuff.
-Mm-hmm. Mm-hmm.
They now have this ability to insert
responsive grids into that Rich Editor
content, so you can almost... So, like,
if, um... You know, I know in GitHub you
can sort of say /table, and then you can
define, like, "Hey, give me this sort of
table," and then you can fill in those
pieces.
-Yeah.
-This is like that but better because it
can, can include these responsive grids
with up to 12 columns wide. Um, you can
split them into two columns or each take a
third of the space, or you can do more
advanced layouts. It's a little bit
difficult to describe, but that being
said, there is another video demo in here
so you can see exactly how this works. The
interface looks really clean, really
nice, and, uh, if you've ever needed to
insert grids using something like that,
it's definitely gonna be a welcome
addition. You also have the text color
tool, which is available inside of that
Rich Editor. So you can select some text
and then say, "Here is the color I'd like
that text to be," uh, which is
interesting. Uh, you also have images and
things like that, uh, available in there.
Okay. There is a new table repeater in
version 4 that makes it possible to render
each form field in its own table cell,
but it has now a compact design. Um, so
they look seamless from the cells. Things
like selects and text inputs previously,
they would sort of break the layout of it.
-And so now-
-Mm-hmm
... with this compact design, it, it
really makes them fit within a single cell
there. And then as you mouse over them,
they'll expand, uh, to fill the space
that's needed in order to display all that
information. So really, really cool
there. Uh, cool there. Uh, new table
layouts for repeatable entries. Um, uh,
but like for info list entries, that
allows you to output static tables,
including, uh, item... Schemes with text,
icons, images, and more. Uh, there's an
empty state schema component. This is
pretty cool because we've all had to
define these ourselves previously. If
there's something that you've said, "Hey,
there's nothing here for you to, to see,"
uh, you now have a schema component that
will insert an empty state anywhere inside
your application so you don't have to do
that yourself. There's also a brand new
Filament version 4 plugin ecosystem. Uh,
224 version 4 plugins that are now
available on there. Um, some really, uh,
cool ones. Passkeys, Prism Theme, Header
Select. There's a bunch of them in there.
They're, uh, more getting added all the
time. Uh, Dan Herrin, uh, wrote this one
up. Thanks so much, Dan, for doing so. And
you should definitely check out Filament
version 4.1 today if you can. Just a
Composer update away from version 4.0.
There you have it. Also, if you're, if
you're not on the Discord server and
you're heavy into Filament, you should
definitely do so. A lot of good
conversations and stuff going on over
there. Check that one out.
Nice. PrettierPHP is an opinionated code
formatter that is a fast, deterministic
code formatter for PHP written in PHP. It
has sensible defaults and runs without
configurations. I assume this is very much
in the same spirit as Prettier is for,
like, JavaScript and CSS. It is
configurable now, but it was originally
launched with, like, "No. This is just how
it is," and that's, that's that. So, uh,
the command line application has a VS Code
extension that allows you to format your
files and, uh, on save. Now, there's no
reason to ditch Laravel Pint or
phpcs-fixer if you're still using that to
handle formatting in your Laravel
projects. However, this project, being a
PHP formatter, indicates a healthy PHP
ecosystem that is growing with new tools.
And the author of this article, Mr. Paul
Redmond, likes that PrettyPHP is
opinionated, and using it to format your
projects will ensure consistent formatting
across all files and has defaults for
Symfony, Drupal, Laravel, and WordPress.
It formats code written for PHP 8.4 and
below, so it does support, uh, property
hooks, for example, which have, has taken
some time in other tools that I use to, to
get full support. Code is formatted for
readability, consistency, and small
diffs.Any previous formatting is ignored
and nothing other than white space is
changed. Entire files are formatted in
place. Formatting options are deliberately
limited. Pretty PHP is opinionated, so
you don't have to be. Configuration is via
a simple JSON file, uh, which is
supported but not required, and
formatting... Formatted and original code
are compared for equivalence. It is
compliant with PSR-12 and PER. Uh, so you
can see more details about that for, uh,
extra details. And as I said, it supports
Symfony, Drupal, Laravel, and WordPress
code styles via presets. You can learn
more about the project, the configuration,
and all of that good stuff, we'll have
-links for you in the show notes.
-Awesome. The next up is we have one called
Lara-Utilx. So this is a utility toolkit
that, quote, every Laravel developer
needs. So as I've been reading through
this,
what it looks like is a team or an
individual who has said, "There's a lot of
things that I've had to write over and
over again in applications that I've
created that I've decided to just create a
bunch of traits for." And so, they've
packaged all of these up and made them
available to you as a sort of grab bag of
different
solutions, uh, that you might want to
have solved for you. So, um, CRUD, API
responses, validation, filtering,
pagination, et cetera. So
w- what is this? W- what's the difference
between this one and other utility
libraries, is the first question. So
number one, they focus on real-world uses.
So these are the utilities you'll
actually reach for in your production
applications. There's no, like,
scaffolding blo- there... It's opt-in. You
don't have to use all the pieces. You can
just use the ones that you want. Um, it's
composable, so they can work together.
You can kind of add the different pieces
in as you need them. It's not an all or
nothing. Uh, and then it's consistent. So
there's predictive responses, uniform
pagination, reusable validation, et
cetera. There's a bunch of things that are
in here, I'm gonna read a couple of them.
So CRUD controller, this is an extendable
controller that turns standard CRUD
endpoints into a few lines of code. This
is good for ad- admin interfaces and APIs.
This one is interesting, an API response
trait. So deciding how you want to send
back JSON responses from an API can be a
bit of a challenge. Um, if you've not
decided already on a convention and you're
deciding for the first time, maybe this
would be something you'd reach for. It
allows you to standardize those JSON
responses across your app. Success, error,
paginated responses, your front end will
thank you if you can make sure that these
are always consistent and the same. Uh, if
you've ever had to deal with uploading or
deleting or reading file contents for
single or multipile- multiple file
uploads, there's a trait for this. So you
don't have to do any of that boilerplate.
You just include this file processing
trait and it turns that controller into,
like, a single method and three lines.
Pretty cool. Um, validation helper traits.
Access log middleware, so it logs all
your incoming requests for traceability,
audits, performance insights. There's a
caching utility. There's a configuration
utility. There's an OpenAI provider. Bunch
of different things in here, I'm not
gonna read through all of them or the
examples. Uh, suffice it to say, if this
is something that you would be interested
in, you can find it in the show notes or
you can find it at github.com/... Well,
it's not even worth reading it. It's too,
it's too hard. You're gonna have to go
look at the show notes. Uh, thank you,
Omar, for submitting this one. Uh, sending
this along.
Lara dumps. Lara dumps...
-Mm.
-... is a powerful and user-friendly
-debugging out by-
-Did you see all the stuff on Twitter about
-this?
-Look.
-Uh-
-People are nothing if not juvenile.
Yes, they are. That is right. Sorry, I
interrupted. Go ahead, my friend.
Lara dumps is a powerful and user-friendly
debugging app that revolutionizes how you
debug Laravel applications. Unlike
traditional debugging methods that
interrupt your application flow or clutter
your browser output, Lara dumps displays
your debugging information in a clean,
organized, standalone desktop application.
The core tools provided by the, uh,
application are framework agnostic and
should be compatible with any PHP project.
However, specific tools for debugging
Laravel and Livewire projects are
included, and also works while testing
your software with Pest. Main features
includes keeping your app running without
interrupting the application flow. There
is a persistent history
between page refre- refreshes, dedicated
interface, multiple dumps, beautiful
formatting, and real-time
updates. The package also offers Xdebug
integration for step-by-step debugging
with full Xdebug support, along with a
variable inspector that provides beautiful
and readable formatting for any variable
type.
The desktop application features
multiscreen support, enabling developers
to organize debug output across multiple
windows. And the interface includes a
theme system with multiple themes powered
by Daisy UI, and offers a table view to
display arrays and objects in searchable
tables. It also provides a specialized
tools for Laravel development. The route
list feature allows developers to view all
registered Laravel routes, while the
model inspector enables examination of
Eloquent model attributes. Here are some
screenshots. It is a very
good-looking application. Uh, it is, you
know, out there in a similar vein to
things like, obviously, Herd's built-in
debugging to Ray. It's another option in
the ecosystem, once again demonstrating
that the PHP ecosystem is thriving and
well, uh, and there is lots of stuff out
there for... You know? Courses for
courses, different things for different
people. So thanks very much to Yannick for
putting this article together.
Lara dumps. All right. Moving on, we have
Laravel Starter Kit by Nuno
Maduro. Another one by Nuno. So, there are
a number of things that we've talked
about in the last year and a half, I
suppose you could say, that feel like
opt-in
features that have been pushed into the
framework that you can sort of turn on but
you don't have to. Um, some of those
would be things like strict models....
auto eager loading, immutable dates,
forcing HTTPS, uh, safe console so that
you can make sure you don't do things that
in production that you should not do,
like drop the database or something like
that. Um, asset pre-fetching, et cetera.
All these different things, not allowing
n+1 queries. Those, right? Um,
Nunos Starter Kit is a Laravel skeleton
for those people who demand meticulous
precision in their projects. It is
enforcing strictness and type coverage,
formatting, maxed static analysis, and
more. So all of the PHPStan, Pest,
Rector, Pint, and Prettier settings are
pre-configured to be as strict as
possible. So 100% type code coverage, PHP
level max, Rector with max, uh, privi-
priviz- privatization? Privatization, I
guess? Um, and then also enhanced tests
and defaults like, um, you know, the Pest
type coverage requires a minimum of
100%.
Um, so
it's... For those of us who are starting a
brand new project, and you really wanna
make sure you're getting off on the right
foot, this Laravel Skeleton is a great way
to start. It's also, if you wanted to, a
way to sort of say, "Okay, if I wanted to
get 100, this is what I'd do," but you can
also dial it back, right? Some of it is
just useful to have as a, "If I wanted to
configure these things and I've not
configured them before, how would I do so
if I was on Team Laravel and setting this
up for the first time?" So you could go
look at the GitHub, you know, the .GitHub
folder in these and kinda see how these
actions are running. Um, or how would I
configure some of these things? It's also
good just for that as well, just for
reference. So take it for what it is, um,
pretty interesting though, and, um, easy
to get started with as well. So it has
some example text at the bottom here that
you would put in to get started, uh,
including the creating the project with
Composer, CDing in, then Composer install,
NPM install, et cetera, et cetera. It's
down the list you go. So, um, good stuff
there. Yeah, what do you think, Michael?
Would you use that?
No, uh, look, I have enough pain and
suffering with PHPStan at level 5. I
don't-
Even just going from 5 to 6 is giving me
nightmares. So I'll just, I'll just leave
this for other people.
-There you go.
-Enjoy it if you d- if you want to.
Next time I start a new project, maybe.
Right? Maybe.
-You, you will unravel very quickly.
-I believe that.
-If you're anything-
-I believe that
... like me.
I am.
I am. So
I'll take your word for it, my friend. All
right.
-Yeah.
-On we go.
The Gemini package for Laravel, developed
by Houssein Hazami, is a package designed
to integrate with the Google Gemini API.
It supports text, image, video, audio,
long context structured output function
calling, and understanding capabilities.
The package also supports streaming
responses using the stream method. Main
pages include text generation with both
context and history, image generation and
understanding, video generation and
analysis, audio synthesis and
transcription, document processing and
understanding, embeddings generation, file
management capabilities, real time
streaming, responses, and configurable
safety settings. There is a whole suite of
these different integrations for
different reasons, for different models
that will keep evolving. You know, we're
in this state of flux, I think, with, uh,
API at the moment, and, uh, it's good to
have options. Uh, I know that we have
spoken about Prism before. TJ spoke about
-Prism-
-Mm-hmm. Yep
... at Laracon US this year. If there is a
chance that you want to move between
different providers and wanna sw- swap
things out really simply, then Prism would
probably be the way to go. If you just
want to use Gemini and always use Gemini,
then
definitely check out something like this,
you know, provider-specific, uh,
application, uh, packages. So we'll have
links to that for you in the show notes.
Very cool. I can see the little one has
crashed our party. Hey, what's up, kiddo?
This is the best part of the show, guys
and girls,
where the kids enter and just get to say
hello. She should wave to the camera.
-Oh. Yeah.
-Oh, too late.
-Oh, she's gone.
-Oh.
It's, uh, school holidays, and they are,
they are home today with mom, who does
-not... doesn't have them. Look-
-We are not gonna complain
-... at this age-
-We are happy to see them.
At this age, they do whatever they want to
do-
-That is correct
-... for the most part. So you can't, you
-can't s-
-It is their house too. Yep.
-That's right.
-Absolutely.
You could tell... I, I've told them, like,
if the door's shut, it means that I'm in
a meeting, whether it's this or it's with,
you know, work people, do- doesn't
-matter.
-Nope, absolutely not.
Doesn't matter when, when they're looking,
when they're looking for their Elsa doll,
or they're looking for their toy, they
come in and look for it. No matter what.
All bets are off. No holds barred. I got
it.
-We love them. We love them all.
-We do, we absolutely do. All right, folks,
another package here. Building Terminal
UIs in PHP with ANSI Kit. Now, you might
think to yourself, "Why do we need this?
Don't we already have Laravel Prompts?"
Ah, yes, you do, but then it would be
dependent on making sure that you're using
Laravel. And in that case, you'd say,
"Well, isn't this the Laravel News
Podcast?" To which I would say, "Yes, it
is." But not all of us get to use Laravel
all the time. So if you are stuck in a
project which is just PHP, or you'd rather
not be using Laravel Prompts, you're
looking for something else, no problem,
we've got you covered. ANSI Kit is a zero
dependency ANSI escape helper for building
terminal UIs in PHP. Uh, so no
dependencies, right? That is the trick
here. It is dependent on nothing. You
include this in your project, and you are
good to go. So it's got a chainable API
for styles, colors, and cursor control
along with useful components and
utilities. You might be reminded that in
addition to Laravel Prompts, we also have
had something like this, uh, I think come
out after Laravel Prompts, which was
talking specifically about some of these
things. I think Aaron Francis actually had
something like this, where it was dealing
with different colors and things like
that. So...So, um, in any case, these are
difficult problems to solve. Multiple
people have solved them their own ways.
Um, but this includes things like being
able to style colors, like the background,
the foreground. It includes RGB, uh, 256
is another thing that it says here.
There's like two 56, 156 colors, I'm
guessing is what it's saying. It includes
the ability to style using bold, italic,
underline or dim. Uh, you can clear the
screen, clear a line, clear from, on, up
to a particular pla- place. You can jump
the cursor around, and then it also ships
with components like tables, banners and
progress bars. So there's a screenshot
inside of the blog post here that shows a
bunch of the different, um, components
that ship with it. There's some example
code for how exactly you would get this
running in your project, and then there is
a listing of all the different features
and components that they have. Let me list
a couple of them here. I said what...
Some of them already, but I'll name some
of them again. TableComponent,
BannerComponent, ProgressBar, Spinner,
Choice, Keypress, InputHelper and more. So
Paul Rudman thought this one was worth a
write-up. We will trust that it is, in
fact, a pretty awesome library. Thanks,
Paul, for writing this right one up.
Everyone's favorite human, got to say it
at least once a show. All right, Michael,
back to you.
At least. Um, tutorial time. You have
helpfully, I was gonna say handily, but
helpfully split this up into t- tutorials,
Livewire-specific tutorials, framework
reminders and videos. And I
am just gonna read through all the
headlines and leave-
-That's better
-... the links to each of them in the show
notes for you to follow up. So tutorials
first, debugging and logging in Laravel
applications. The team at Sentry recently
published a helpful guide on how to make
the most of Laravel's built-in debugging
and logging tools, and how to use Sentry
to debug Laravel apps in production
effectively. There is an introduction to
MongoDB and Laravel MongoDB setup. There
is the hidden cost of MySQL defaults in
Laravel apps. I don't know what is going
on with this
image. This... There's a horse, there's a
girl with a lollipop.
-It looks very creepy. Yeah, it's, it's-
-The hidden cost-
-It's-
-... is apparently creepy Wednesday
Addams-esque imagery. I don't know what is
happening.
-All right. My-
-I will say this one is one of the most
interesting ones to me. This one was
written up by Eric Barnes. But it's
basically like if you just start MySQL and
just ship it and you don't do anything
-with, like, your, you know, DB pool size-
-Mm-hmm
... holy cow, we have run into this
recently, and it was a pain. So if you
-have not-
-Yeah
... looked at any of these things, it's
definitely worth looking at once. And then
it's also some tools like MySQL Tuner.
Like, what... You know, that'll... It's
basically gonna run some stuff that's
gonna tell you, "Oh, you're not doing this
-efficiently. You should check this out."
-Yeah.
I am reading this as soon as our show is
done. So-
-Absolutely
-... just telling you. This one looks
-really good.
-Mm-hmm. Uh, and I... Anyway, as promised,
Livewire session properties for persistent
component state, Livewire
wireclick.preventDefault for form
handling. We also have two more of, uh,
Harris'... What do we call it? Advanced,
efficient-
-Mm-hmm
-... effective. I really should write it
down. Harris' series on
-writing good Lara... Testing your-
-Testing, yeah
... reporting system with Laravel
factories and assertions and profiling
Laravel, how to find hidden performance
killers. And then lastly, three framework
reminders for you this week. Laravel
collection pluck method gains closure
transformation power, Laravel
configuration arrays made simpler with
config collection, and Laravel custom
validation rules for enhanced data
integrity. That is all of the tutorials
this week. I will have links to them all
for you in the show notes. Make sure you
check them out on YouTube, on, uh, in, in
your podcatcher of choice. All of the
links are there.
Absolutely. They are, they are in your
podcatcher of choice. They've gotten
the... They're all broken down. Uh, it's
really well done and you can actually
click around to the different sections
inside of the podcast as well if you're
only interested in this particular pieces.
"Uh, that's one I'm interested in, let me
click through that one." You can skip
through the rest of them, that's fine too.
Folks, Episode 246, the one you just
listened to, you can find show notes for
this at podcast.laravel-news.com/246. We'd
really appreciate it if you'd rate us up
in your podcatcher of choice, as we spoke
about. Five stars would be incredible. And
if you have any questions or comments,
we'd love to hear from you on X, on
BlueSky, @JacobBennett, @MichaelDeRenda,
or @Laravel News. Folks, until next time,
-it's been wonderful. We'll see you.
-Bye.
Creators and Guests

