This 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.