Local errors, pretty PHP, and terminal UIs

Download MP3

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.

Creators and Guests

Michael Dyrynda
Host
Michael Dyrynda
Dad. @laravelphp Artisan. @LaraconAU organiser. Co-host of @northsouthaudio, @laravelnews, @ripplesfm. Opinions are mine.
Local errors, pretty PHP, and terminal UIs
Broadcast by