
Laravel News Podcast
ยทE246
Local errors, pretty PHP, and terminal UIs
Episode Transcript
1
00:00:03,920 --> 00:00:08,800
This is the Laravel News Podcast, your
one-stop podcast to find out about
2
00:00:08,800 --> 00:00:14,180
Laravel-related news, tutorials, packages,
and more. Here are your hosts, Jake
3
00:00:14,180 --> 00:00:17,340
Bennett and Michael Derenda.
4
00:00:30,600 --> 00:00:34,780
Hello, folks. Welcome to the Laravel News
Podcast. My name is Jake Bennett. With me,
5
00:00:34,780 --> 00:00:40,160
as always, is my wonderful cohost, Mr.
Michael Derenda. We are on episode 246. It
6
00:00:40,160 --> 00:00:47,160
is September 30th, 2025. No pre-show.
Folks, if you want pre-show, you have
7
00:00:47,160 --> 00:00:52,320
to talk to us. Say something on X or on
BlueSky. Just say anything-
8
00:00:52,320 --> 00:00:54,300
-Mm
-... and we'll bring it back. And if you
9
00:00:54,300 --> 00:00:54,850
-say nothing-
-Bring it back
10
00:00:54,850 --> 00:00:56,180
... then we're just gonna keep it like
this.
11
00:00:56,860 --> 00:00:57,720
-We're never gonna do-
-Is that not fair, Michael?
12
00:00:57,720 --> 00:00:59,300
-... a pre-show again. Yeah.
-No pre-show.
13
00:00:59,300 --> 00:01:02,900
-Find another podcast.
-That's right. No, don't. Just stay here.
14
00:01:02,900 --> 00:01:05,140
No, no. Stay here, stay here, but we'll go
straight into it.
15
00:01:05,140 --> 00:01:07,820
-Stay here.
-Ready? There is a new, there is a new-
16
00:01:07,820 --> 00:01:12,660
-Go ahead
-... local error page in Laravel 12.29.
17
00:01:12,660 --> 00:01:18,500
Ryuta Hamasaki and Jeremy Butler created a
brand-new local exception page for
18
00:01:18,500 --> 00:01:23,260
Laravel applications. The new exception
page retains the Copy as Markdown button
19
00:01:23,260 --> 00:01:28,980
that was released in 12.25 and removes
manual dark-light toggles in favor of
20
00:01:28,980 --> 00:01:34,140
automatically detecting light and dark
mode. Uh, you can see pull request
21
00:01:34,140 --> 00:01:41,020
57,036 for details. Uh, this is very nice.
It leans, I think, very much into the,
22
00:01:41,020 --> 00:01:44,260
the kind of design language that they've
got inside of Nightwatch. So there's some
23
00:01:44,260 --> 00:01:47,680
consistency there between what you see
locally and what you will see
24
00:01:48,320 --> 00:01:52,260
in Nightwatch if you are using that for
your error monitoring on your Laravel
25
00:01:52,260 --> 00:01:58,560
applications. Uh, Joel Pedro Lopes, along
with various community developers and core
26
00:01:58,560 --> 00:02:03,620
Laravel team members, contributed a
cache-session driver. It is best to read
27
00:02:03,620 --> 00:02:07,620
through the discussion and code in pull
request 56887,
28
00:02:08,240 --> 00:02:12,519
but an example from that is talking about
sticky database connections across
29
00:02:12,520 --> 00:02:18,660
requests. Now, I saw some discussion about
this. Why would you use, um, session for
30
00:02:18,660 --> 00:02:23,080
cache, and things like that? The benefit
of using the session driver for your cache
31
00:02:23,080 --> 00:02:28,079
is that it is tied to your user's
authentication session. So you don't have
32
00:02:28,080 --> 00:02:31,720
to worry about cleanup and things like
that. As soon as they log out, then
33
00:02:31,720 --> 00:02:37,960
obviously that cache is, uh, expired. So
this is very useful if you need to for a,
34
00:02:37,960 --> 00:02:42,640
for example, a multi-tenant context, you
wanna switch the database connection and
35
00:02:42,640 --> 00:02:47,040
have a, a c- persistent connection, for
example. The, the example in the pull
36
00:02:47,040 --> 00:02:51,920
request goes more specifically into a
sticky database connection. So, if you've
37
00:02:51,920 --> 00:02:57,730
got reads and writes split, it will, um,
set all of your writes and reads to share
38
00:02:57,730 --> 00:03:02,400
the connection, just to make sure that you
don't have any latency between, um, reads
39
00:03:02,400 --> 00:03:06,520
and writes there. So definitely look into
the pull request for more detail.
40
00:03:06,520 --> 00:03:08,930
Can I interrupt, two seconds? So we
actually-
41
00:03:08,930 --> 00:03:12,960
-You may
-... have this exact problem on our, um...
42
00:03:12,960 --> 00:03:15,960
I'm salary, so it doesn't matter as much,
but for the people who have to clock in
43
00:03:15,960 --> 00:03:19,740
and out, first people... Like people who
are just getting started at our company,
44
00:03:19,740 --> 00:03:22,700
when they go to clock in, and they're
like, "It didn't happen." Like, "I c- I
45
00:03:22,700 --> 00:03:25,840
pressed clock in, and then it doesn't show
as a clock in." Like, and then it's
46
00:03:25,840 --> 00:03:30,300
eventually consistent, but the problem is
that it's using a separate database. It
47
00:03:30,300 --> 00:03:33,720
goes and hits one of the databases, and
then eventually it gets around to syncing
48
00:03:33,720 --> 00:03:37,269
the back, with the database that they're
actually viewing. And so it's-
49
00:03:37,269 --> 00:03:38,609
-Yeah
-... very annoying. You have to explain to
50
00:03:38,609 --> 00:03:41,359
them, "No, no, no. You click it once.
Don't click it three times until you see
51
00:03:41,360 --> 00:03:41,500
-it."
-Yeah.
52
00:03:41,500 --> 00:03:42,580
-Like, just click it one time.
-Yeah.
53
00:03:42,580 --> 00:03:43,660
-It recorded.
-Yeah.
54
00:03:43,660 --> 00:03:46,500
It's just not gonna show up immediately
because it doesn't use this, right? It
55
00:03:46,500 --> 00:03:49,860
doesn't use sticky sessions. It doesn't,
you know, pin you to a database. It
56
00:03:49,860 --> 00:03:52,700
basically just says, "Just write to
whatever one and read from whatever one,"
57
00:03:52,700 --> 00:03:54,400
-and it's super annoying. So, anyway-
-Yeah
58
00:03:54,400 --> 00:03:56,760
... this is a really cool contribution.
Love this.
59
00:03:56,760 --> 00:04:02,140
Well, sure. Next up, Luca Patera
contributed the ability to define custom
60
00:04:02,140 --> 00:04:06,060
resource classes directly on a model using
PHP attributes. And using these
61
00:04:06,060 --> 00:04:09,860
attributes, you can avoid boilerplate when
converting a model to the intended
62
00:04:09,860 --> 00:04:10,390
resource.
63
00:04:11,020 --> 00:04:15,040
So previously, you had to say, uh, you
know, Model.toResource and then pass it
64
00:04:15,040 --> 00:04:18,300
the class string that represents that, or
to a resource collection and the class
65
00:04:18,300 --> 00:04:23,600
string of that. Now you can just call
toResource or toResourceCollection on the
66
00:04:23,600 --> 00:04:28,340
model or the collection itself, and then
you can use useResource or
67
00:04:28,340 --> 00:04:33,880
useResourceCollectionAttributes on the
model itself to define the class string
68
00:04:33,880 --> 00:04:35,420
-for what those are.
-Very nice.
69
00:04:35,420 --> 00:04:36,370
-So thanks-
-Love that
70
00:04:36,370 --> 00:04:41,260
... to Luca for that one. And lastly, in
this release, Danny Foster contributed a
71
00:04:41,260 --> 00:04:45,820
JSON flag to the scheduleListArtisan
command, which will return the data as a
72
00:04:45,820 --> 00:04:50,860
JSON, uh, object, which is useful for
monitoring deployments and integrations.
73
00:04:50,860 --> 00:04:55,760
So this is fantastic if you will, you
know, need to send that data somewhere, if
74
00:04:55,760 --> 00:04:59,480
you're monitoring that things have been
run or when they should run and things
75
00:04:59,480 --> 00:05:03,820
like that, which enables neat commands
that are piped to things like jq for
76
00:05:03,820 --> 00:05:08,700
monitoring to ensure scheduled tasks exist
during a deployment. So we'll leave that
77
00:05:08,700 --> 00:05:15,500
up to you, dear listener, to delve into
further, but that is all for 12.29.
78
00:05:15,500 --> 00:05:19,120
Very cool. Hey, for those of you who
happen to be using Inertia, Infinite
79
00:05:19,120 --> 00:05:23,880
Scroll is now available in Inertia version
2.2. This was released with this new
80
00:05:23,880 --> 00:05:28,820
Infinite Scroll component, and this will
likely be a huge time-saver if you, dear
81
00:05:28,820 --> 00:05:33,760
listener, have ever had to build an
Infinite Scroll feature by hand. Uh, this
82
00:05:33,760 --> 00:05:39,880
update introduces this new Inertia scroll
method. And good news, it works seamlessly
83
00:05:39,880 --> 00:05:45,740
with Laravel's existing full, simple, or
cursor pagination. So it's not anything
84
00:05:45,740 --> 00:05:48,540
brand new you have to do in Laravel. It
works the exact same as the rest of it
85
00:05:48,540 --> 00:05:52,980
does. You now just wrap it in that Inertia
scroll on the server side. On the client
86
00:05:52,980 --> 00:05:58,719
side, you wrap your content in this new
Infinite Scroll component. So, the really
87
00:05:58,720 --> 00:06:02,940
cool things that this offers you, um, is
that it works, number one, with Vue.
88
00:06:03,056 --> 00:06:04,676
-...
-... you know, React, Svelte, it's got a
89
00:06:04,676 --> 00:06:09,836
component for each of 'em. Uh, it will
also update the URL as you scroll down the
90
00:06:09,836 --> 00:06:13,636
page. So if you're halfway down the page
and you want to share that link with a
91
00:06:13,636 --> 00:06:17,256
friend, you copy the URL, paste it to
them, and it'll land them in the same
92
00:06:17,256 --> 00:06:20,056
place on the page that you were at when
you copied the link.
93
00:06:20,056 --> 00:06:22,486
-That's cool.
-Scrolling back up the page also updates
94
00:06:22,486 --> 00:06:26,576
that URL. So it's not just as you progress
down through, it'll also, as you progress
95
00:06:26,576 --> 00:06:30,956
back up through it, it will, it will
update the URL as well. Um, if you happen
96
00:06:30,956 --> 00:06:35,695
to jump to a particular location, paste
that URL, it will backfill those pages on
97
00:06:35,696 --> 00:06:40,696
a, um, oh, sorry, those earlier pages on
the page refresh. And then it also has
98
00:06:40,696 --> 00:06:44,096
bidirectional scrolling outta the box,
including reverse mode. So you can say,
99
00:06:44,096 --> 00:06:48,276
"Scroll up to load the next page or scroll
down to load the previous pages." I'm not
100
00:06:48,276 --> 00:06:51,696
sure why you would do that, other than
sort of Apple has that, like, natural
101
00:06:51,696 --> 00:06:52,336
gesture-
102
00:06:53,236 --> 00:06:55,596
-Mm-hmm
-... um, sort of thing. I- I'm not sure.
103
00:06:55,596 --> 00:07:00,216
Maybe that's why. I- I don't know exactly.
But in any case, it's possible.
104
00:07:00,216 --> 00:07:03,696
Configurable flexible options as you would
assume. There's also manual mode for
105
00:07:03,696 --> 00:07:08,116
complete control of the load- loading so
that you can, um, really dig in and
106
00:07:08,116 --> 00:07:12,706
configure that exactly as you'd like to.
Uh, there is infinite scroll documentation
107
00:07:12,706 --> 00:07:17,716
in the Inertia docs as well, so you can
check that out. Really cool addition. I
108
00:07:17,716 --> 00:07:21,416
know I've seen a lot of people talking
about this on Twitter, Taylor included,
109
00:07:21,416 --> 00:07:24,976
and so this is a really, really nice one
if you've had to do this by hand before,
110
00:07:24,976 --> 00:07:26,606
-no longer. Now you can use this-
-Mm-hmm
111
00:07:26,606 --> 00:07:30,116
... infinite scroll straight in Inertia.
Love it. Really cool.
112
00:07:30,116 --> 00:07:33,276
Yeah. Shout-out to Pascal and the team
that- that have been working on this. It's
113
00:07:33,276 --> 00:07:36,256
very cool that, you know, a- as Laravel
has taken on
114
00:07:37,116 --> 00:07:41,316
ownership of Inertia, the project, and
they can dedicate time and resources to
115
00:07:41,316 --> 00:07:44,836
it, it's really cool to see the
progression. You know, it was always
116
00:07:44,836 --> 00:07:48,276
considered, like, a feature-complete thing
from Jonathan's perspective, I think,
117
00:07:48,276 --> 00:07:51,756
because, you know, he- he didn't really
have time to- to work on it. So the fact
118
00:07:51,756 --> 00:07:52,056
that
119
00:07:52,756 --> 00:07:56,116
Taylor and Laravel saw that there was more
to be done and that they had the
120
00:07:56,116 --> 00:08:00,856
resources to g- dedicate to it, now we're
seeing the- the fruits of that labor. So
121
00:08:00,856 --> 00:08:05,416
shout-out to everyone involved in keeping
Inertia, uh, performant and- and
122
00:08:05,416 --> 00:08:07,776
functional and- and living and breathing,
so
123
00:08:08,656 --> 00:08:15,656
very cool. The Laravel team launched a
public beta of the Laravel
124
00:08:15,656 --> 00:08:20,316
MCP package, which is a package to
rapidly build model context protocol
125
00:08:20,316 --> 00:08:25,436
servers for your Laravel applications.
Laravel MCP joins Laravel Boost as a
126
00:08:25,436 --> 00:08:30,236
first-party tool that makes working with
AI in Laravel a joy to build. So the MCP
127
00:08:30,236 --> 00:08:33,956
package itself will provide you a
framework for AI clients to interact with
128
00:08:33,956 --> 00:08:38,996
your application, defining routes,
servers, prompts, and more. Servers define
129
00:08:38,996 --> 00:08:42,416
the central communication point to
provide capabilities such as tools,
130
00:08:42,416 --> 00:08:46,616
resources, and prompts, and there is an
example of a current weather tool in the
131
00:08:46,616 --> 00:08:51,556
documentation that gives you a quick taste
of building with Laravel MCP. You define
132
00:08:51,556 --> 00:08:56,796
a handle method and a schema method, so
very familiar stuff if you've built jobs
133
00:08:56,796 --> 00:09:01,755
or anything like that in Laravel. Laravel
MCP is released to the public as a beta
134
00:09:01,756 --> 00:09:05,516
version, but it already feels like a
polished Laravel package, and it feels
135
00:09:05,516 --> 00:09:09,736
very much like building MVC Laravel
applications. We think that the package
136
00:09:09,736 --> 00:09:14,316
itself will help the Laravel community
product- productively build MCP servers
137
00:09:14,316 --> 00:09:18,896
that are not only a joy to use but also to
build. With the beta release, there are a
138
00:09:18,896 --> 00:09:22,796
lot of resources to get started, so check
out the Laravel MCP documentation, the
139
00:09:22,796 --> 00:09:28,616
MCP repo. There is a demo application
called Locket. There is a web demo app in
140
00:09:28,616 --> 00:09:32,176
Laravel Cloud. There is the announcement
post from Laravel, and there is a video
141
00:09:32,176 --> 00:09:37,316
from Nuno Maduro, uh, who worked on this
with Ashley Hindle, I believe, uh,
142
00:09:37,316 --> 00:09:41,076
introducing Laravel MCP. So we have links
to all of that for you in the show notes,
143
00:09:41,076 --> 00:09:41,596
of course.
144
00:09:42,756 --> 00:09:45,796
Um, can I just make sure... So for those
145
00:09:45,796 --> 00:09:51,156
of you who are, um, with me sometimes, you
know, thinking about like, okay, you hear
146
00:09:51,156 --> 00:09:56,296
MCP, what exactly are we talking about
here, right? To be clear, this is allowing
147
00:09:56,296 --> 00:09:57,676
you to
148
00:09:58,516 --> 00:10:03,716
define tools and endpoints for your
Laravel application that would then be
149
00:10:03,716 --> 00:10:10,696
exposed as an MCP for LLMs to interact
with. So if your application provides
150
00:10:10,696 --> 00:10:15,656
some novel sort of tools that you would
like to expose, um, you can do so using
151
00:10:15,656 --> 00:10:20,156
this tool. It allows you to... It- it sort
of, uh, has conventions around how you
152
00:10:20,156 --> 00:10:24,156
should structure these things and how you
should expose those as an MCP server. So
153
00:10:24,156 --> 00:10:26,836
that's the idea here. You know, I know
there's a lot of talk about some of these
154
00:10:26,836 --> 00:10:29,616
things. What exactly is this one? That's
what this one is.
155
00:10:29,616 --> 00:10:32,196
-Mm-hmm. Yeah.
-But it- it, you know, really, it, you
156
00:10:32,196 --> 00:10:35,976
know, it's built by the, by the Laravel
team, so you can say that this would be
157
00:10:35,976 --> 00:10:38,386
the Laravel way to build your own MCP
server.
158
00:10:38,386 --> 00:10:39,096
-Mm-hmm.
-So, um-
159
00:10:39,096 --> 00:10:40,976
-Yeah
-... well done by the team there, and
160
00:10:40,976 --> 00:10:42,436
really excited to check that one out.
161
00:10:43,176 --> 00:10:47,336
From- from my perspective, I understand
what this is and what it enables.
162
00:10:47,336 --> 00:10:50,736
-Mm-hmm. Mm-hmm.
-What I don't understand is why you would
163
00:10:50,736 --> 00:10:54,796
do it. If you could explain to me why I
would want to provide an AI interface for
164
00:10:54,796 --> 00:10:55,186
someone
165
00:10:55,816 --> 00:11:00,915
sitting in their cloud or whatever to then
talk to my web application, I would like
166
00:11:00,915 --> 00:11:04,536
-for you to explain that to me.
-Okay. I c- can I take a shot?
167
00:11:04,536 --> 00:11:08,415
-You can try.
-Okay. So let's say that I have an
168
00:11:08,415 --> 00:11:14,656
application that I'm building that allows
clients... Let's- let's just, let's define
169
00:11:14,656 --> 00:11:17,296
them as insurance carriers, okay? Those
are the people.
170
00:11:17,296 --> 00:11:20,456
-Mm-hmm.
-They're wanting to deliver their claims
171
00:11:21,096 --> 00:11:26,696
to a vendor on the outside, okay? So my
application sits in the middle between the
172
00:11:26,696 --> 00:11:28,856
-insurance carrier and the vendor.
-Mm-hmm.
173
00:11:28,856 --> 00:11:29,016
I
174
00:11:29,756 --> 00:11:33,536
take aggregate data from the insurance
carrier and documents and things like
175
00:11:33,536 --> 00:11:40,086
that, and I format them into a consistent,
um, data structure that I can ingest from
176
00:11:40,086 --> 00:11:43,896
any insurance carrier, and I sort of
standardize those fields for vendors to
177
00:11:43,896 --> 00:11:44,936
then take and work with.
178
00:11:45,656 --> 00:11:51,556
It's possible that I would want the vendor
themselves, instead of just using APIs to
179
00:11:51,556 --> 00:11:55,716
be able to interact with that data, I
want to expose to them an endpoint where
180
00:11:55,716 --> 00:12:00,056
they can ask questions about the inventory
that has been assigned to them from that
181
00:12:00,056 --> 00:12:03,746
insurance carrier, for example. So they
could say, "How many claims do I currently
182
00:12:03,746 --> 00:12:07,308
have outstanding?"They could ask that
question from the LLM, and it would be
183
00:12:07,308 --> 00:12:11,827
able to use the tool that I've exposed to
say, "Here you go. This is how many you
184
00:12:11,828 --> 00:12:12,908
-have." Or-
-Right
185
00:12:12,908 --> 00:12:15,428
... "How many claims do I currently have
assigned that have a balance greater than
186
00:12:15,428 --> 00:12:20,947
$10,000?" There you go. Right? And so it
could, it could interact with it that way.
187
00:12:20,947 --> 00:12:24,147
I suppose that would be maybe a valid use
case for, for why-
188
00:12:24,148 --> 00:12:25,248
-Yeah
-... you would use something like this.
189
00:12:26,168 --> 00:12:27,448
-So then-
-With natural language-
190
00:12:27,448 --> 00:12:29,147
-Someone on the other-
-... queries almost, sort of.
191
00:12:29,148 --> 00:12:29,948
-Yeah.
-You know? Like...
192
00:12:29,948 --> 00:12:31,058
-And then someone on the other side-
-The vendor would have to-
193
00:12:31,058 --> 00:12:33,518
... has to then link that up with your MCP
server.
194
00:12:33,518 --> 00:12:36,008
Right. Correct. That would... That's
exactly right. Yeah. Somebody... They'd
195
00:12:36,008 --> 00:12:39,168
have to have somebody sophisticated enough
on their side to say, "Okay. We have an
196
00:12:39,168 --> 00:12:45,738
L- LLM, and we need to hook it up to your
MCP server." And yeah. Away you go. Um, at
197
00:12:45,738 --> 00:12:46,178
-this point-
-I think-
198
00:12:46,178 --> 00:12:49,208
... some of it I feel like is, like,
marketing speak too. So, like, you can
199
00:12:49,208 --> 00:12:49,318
-say-
-Mm-hmm
200
00:12:49,318 --> 00:12:52,078
... "Hey. We're j- you know, we're
releasing an MC- MCP server with our
201
00:12:52,078 --> 00:12:55,268
particular service as well." And some tech
head's gonna be like, "No way. You guys
202
00:12:55,268 --> 00:12:57,788
are ahead of the curve. You're
releasing..." You know. I don't know. I
203
00:12:57,788 --> 00:12:59,028
-don't know.
-Yeah. Yeah. Very interesting.
204
00:12:59,028 --> 00:13:01,008
I get what you're saying though too. Yeah.
That's, it's like, "Hmm."
205
00:13:01,008 --> 00:13:04,308
I'm sure one day... You know, it took me
three years to figure out what this is all
206
00:13:04,308 --> 00:13:07,468
about, so I'm sure one day in about three
years someone will show me something that
207
00:13:07,468 --> 00:13:11,448
-makes me go, "Oh. Okay."
-Ah. That's it. That's it. Right. For sure.
208
00:13:11,448 --> 00:13:16,208
Okay. Speaking of things that are being
released, Filament 4.1 is here. Really
209
00:13:16,208 --> 00:13:20,228
excited to announce this one. Since 4.0
was, was released, the core team and
210
00:13:20,228 --> 00:13:24,248
community have been really hard at work.
There's been 156 bug fixes that have been
211
00:13:24,248 --> 00:13:28,248
merged and 39 brand new features. So we're
gonna go through a couple of the new
212
00:13:28,248 --> 00:13:33,368
features in 4.1, some of our favorites.
There is a new panel layout. So in the
213
00:13:33,368 --> 00:13:36,308
traditional layout with Filament, you'd
have a top bar, you'd have a sidebar, and
214
00:13:36,308 --> 00:13:40,448
then you'd have the main content. You can
now do it no top bar. So this is perfect
215
00:13:40,448 --> 00:13:44,948
for apps that really, um, need all of that
ma- all that vertical space, right? They
216
00:13:44,948 --> 00:13:48,948
wanna maximize the vertical space there.
So the user menu, notification button,
217
00:13:48,948 --> 00:13:52,528
global search, they get moved to the
sidebar, which then opens up some
218
00:13:52,528 --> 00:13:56,038
interesting, uh, you know, theming
possibilities, if you will. So, um-
219
00:13:56,038 --> 00:13:57,308
-Mm-hmm
-... it looks really good. There's a
220
00:13:57,308 --> 00:14:00,768
screenshot and a little video demo in the
blog post here. You should definitely
221
00:14:00,768 --> 00:14:04,748
check that one out. Shout out to Nolan
Nordlund for his time that was spent on
222
00:14:04,748 --> 00:14:08,508
that feature. There also is some
interesting things that are available
223
00:14:08,508 --> 00:14:12,528
inside of their Rich Editor. So their Rich
Editor is like this text field.
224
00:14:13,668 --> 00:14:17,948
Think, like, Tricks, right? Um, you know,
you have bolding, italicize, all that sort
225
00:14:17,948 --> 00:14:18,698
-of stuff.
-Mm-hmm. Mm-hmm.
226
00:14:18,698 --> 00:14:24,088
They now have this ability to insert
responsive grids into that Rich Editor
227
00:14:24,088 --> 00:14:29,148
content, so you can almost... So, like,
if, um... You know, I know in GitHub you
228
00:14:29,148 --> 00:14:32,588
can sort of say /table, and then you can
define, like, "Hey, give me this sort of
229
00:14:32,588 --> 00:14:33,668
table," and then you can fill in those
pieces.
230
00:14:33,668 --> 00:14:36,208
-Yeah.
-This is like that but better because it
231
00:14:36,208 --> 00:14:41,668
can, can include these responsive grids
with up to 12 columns wide. Um, you can
232
00:14:41,668 --> 00:14:44,848
split them into two columns or each take a
third of the space, or you can do more
233
00:14:44,848 --> 00:14:47,968
advanced layouts. It's a little bit
difficult to describe, but that being
234
00:14:47,968 --> 00:14:52,128
said, there is another video demo in here
so you can see exactly how this works. The
235
00:14:52,128 --> 00:14:55,188
interface looks really clean, really
nice, and, uh, if you've ever needed to
236
00:14:55,188 --> 00:14:58,248
insert grids using something like that,
it's definitely gonna be a welcome
237
00:14:58,248 --> 00:15:02,628
addition. You also have the text color
tool, which is available inside of that
238
00:15:02,628 --> 00:15:06,648
Rich Editor. So you can select some text
and then say, "Here is the color I'd like
239
00:15:06,648 --> 00:15:10,928
that text to be," uh, which is
interesting. Uh, you also have images and
240
00:15:10,928 --> 00:15:16,128
things like that, uh, available in there.
Okay. There is a new table repeater in
241
00:15:16,128 --> 00:15:20,467
version 4 that makes it possible to render
each form field in its own table cell,
242
00:15:20,468 --> 00:15:26,168
but it has now a compact design. Um, so
they look seamless from the cells. Things
243
00:15:26,168 --> 00:15:30,678
like selects and text inputs previously,
they would sort of break the layout of it.
244
00:15:30,678 --> 00:15:31,418
-And so now-
-Mm-hmm
245
00:15:31,418 --> 00:15:35,788
... with this compact design, it, it
really makes them fit within a single cell
246
00:15:35,788 --> 00:15:40,657
there. And then as you mouse over them,
they'll expand, uh, to fill the space
247
00:15:40,657 --> 00:15:44,388
that's needed in order to display all that
information. So really, really cool
248
00:15:44,388 --> 00:15:50,408
there. Uh, cool there. Uh, new table
layouts for repeatable entries. Um, uh,
249
00:15:50,408 --> 00:15:54,448
but like for info list entries, that
allows you to output static tables,
250
00:15:54,448 --> 00:16:00,468
including, uh, item... Schemes with text,
icons, images, and more. Uh, there's an
251
00:16:00,468 --> 00:16:04,088
empty state schema component. This is
pretty cool because we've all had to
252
00:16:04,088 --> 00:16:08,068
define these ourselves previously. If
there's something that you've said, "Hey,
253
00:16:08,068 --> 00:16:12,967
there's nothing here for you to, to see,"
uh, you now have a schema component that
254
00:16:12,968 --> 00:16:16,368
will insert an empty state anywhere inside
your application so you don't have to do
255
00:16:16,368 --> 00:16:22,287
that yourself. There's also a brand new
Filament version 4 plugin ecosystem. Uh,
256
00:16:22,287 --> 00:16:28,168
224 version 4 plugins that are now
available on there. Um, some really, uh,
257
00:16:28,168 --> 00:16:34,268
cool ones. Passkeys, Prism Theme, Header
Select. There's a bunch of them in there.
258
00:16:34,268 --> 00:16:38,927
They're, uh, more getting added all the
time. Uh, Dan Herrin, uh, wrote this one
259
00:16:38,928 --> 00:16:42,948
up. Thanks so much, Dan, for doing so. And
you should definitely check out Filament
260
00:16:42,948 --> 00:16:48,588
version 4.1 today if you can. Just a
Composer update away from version 4.0.
261
00:16:48,588 --> 00:16:51,468
There you have it. Also, if you're, if
you're not on the Discord server and
262
00:16:51,468 --> 00:16:54,408
you're heavy into Filament, you should
definitely do so. A lot of good
263
00:16:54,408 --> 00:16:58,408
conversations and stuff going on over
there. Check that one out.
264
00:16:58,408 --> 00:17:04,438
Nice. PrettierPHP is an opinionated code
formatter that is a fast, deterministic
265
00:17:04,438 --> 00:17:10,688
code formatter for PHP written in PHP. It
has sensible defaults and runs without
266
00:17:10,688 --> 00:17:16,128
configurations. I assume this is very much
in the same spirit as Prettier is for,
267
00:17:16,128 --> 00:17:19,668
like, JavaScript and CSS. It is
configurable now, but it was originally
268
00:17:19,668 --> 00:17:23,798
launched with, like, "No. This is just how
it is," and that's, that's that. So, uh,
269
00:17:23,798 --> 00:17:27,828
the command line application has a VS Code
extension that allows you to format your
270
00:17:27,828 --> 00:17:32,588
files and, uh, on save. Now, there's no
reason to ditch Laravel Pint or
271
00:17:32,588 --> 00:17:35,608
phpcs-fixer if you're still using that to
handle formatting in your Laravel
272
00:17:35,608 --> 00:17:40,288
projects. However, this project, being a
PHP formatter, indicates a healthy PHP
273
00:17:40,288 --> 00:17:45,028
ecosystem that is growing with new tools.
And the author of this article, Mr. Paul
274
00:17:45,028 --> 00:17:49,768
Redmond, likes that PrettyPHP is
opinionated, and using it to format your
275
00:17:49,768 --> 00:17:54,268
projects will ensure consistent formatting
across all files and has defaults for
276
00:17:54,268 --> 00:17:59,948
Symfony, Drupal, Laravel, and WordPress.
It formats code written for PHP 8.4 and
277
00:17:59,948 --> 00:18:04,928
below, so it does support, uh, property
hooks, for example, which have, has taken
278
00:18:04,928 --> 00:18:09,648
some time in other tools that I use to, to
get full support. Code is formatted for
279
00:18:09,648 --> 00:18:14,256
readability, consistency, and small
diffs.Any previous formatting is ignored
280
00:18:14,256 --> 00:18:17,816
and nothing other than white space is
changed. Entire files are formatted in
281
00:18:17,816 --> 00:18:22,316
place. Formatting options are deliberately
limited. Pretty PHP is opinionated, so
282
00:18:22,316 --> 00:18:26,776
you don't have to be. Configuration is via
a simple JSON file, uh, which is
283
00:18:26,776 --> 00:18:30,236
supported but not required, and
formatting... Formatted and original code
284
00:18:30,236 --> 00:18:35,396
are compared for equivalence. It is
compliant with PSR-12 and PER. Uh, so you
285
00:18:35,396 --> 00:18:39,876
can see more details about that for, uh,
extra details. And as I said, it supports
286
00:18:39,876 --> 00:18:45,876
Symfony, Drupal, Laravel, and WordPress
code styles via presets. You can learn
287
00:18:45,876 --> 00:18:49,156
more about the project, the configuration,
and all of that good stuff, we'll have
288
00:18:49,156 --> 00:18:54,576
-links for you in the show notes.
-Awesome. The next up is we have one called
289
00:18:54,576 --> 00:18:59,036
Lara-Utilx. So this is a utility toolkit
290
00:18:59,676 --> 00:19:03,656
that, quote, every Laravel developer
needs. So as I've been reading through
291
00:19:03,656 --> 00:19:03,856
this,
292
00:19:04,496 --> 00:19:09,616
what it looks like is a team or an
individual who has said, "There's a lot of
293
00:19:09,616 --> 00:19:13,776
things that I've had to write over and
over again in applications that I've
294
00:19:13,776 --> 00:19:20,036
created that I've decided to just create a
bunch of traits for." And so, they've
295
00:19:20,036 --> 00:19:25,396
packaged all of these up and made them
available to you as a sort of grab bag of
296
00:19:25,396 --> 00:19:25,836
different
297
00:19:26,856 --> 00:19:29,376
solutions, uh, that you might want to
298
00:19:30,116 --> 00:19:36,136
have solved for you. So, um, CRUD, API
responses, validation, filtering,
299
00:19:36,136 --> 00:19:37,756
pagination, et cetera. So
300
00:19:38,736 --> 00:19:41,236
w- what is this? W- what's the difference
between this one and other utility
301
00:19:41,236 --> 00:19:46,216
libraries, is the first question. So
number one, they focus on real-world uses.
302
00:19:46,216 --> 00:19:49,716
So these are the utilities you'll
actually reach for in your production
303
00:19:49,716 --> 00:19:53,516
applications. There's no, like,
scaffolding blo- there... It's opt-in. You
304
00:19:53,516 --> 00:19:57,036
don't have to use all the pieces. You can
just use the ones that you want. Um, it's
305
00:19:57,036 --> 00:20:01,056
composable, so they can work together.
You can kind of add the different pieces
306
00:20:01,056 --> 00:20:05,856
in as you need them. It's not an all or
nothing. Uh, and then it's consistent. So
307
00:20:05,856 --> 00:20:09,376
there's predictive responses, uniform
pagination, reusable validation, et
308
00:20:09,376 --> 00:20:13,716
cetera. There's a bunch of things that are
in here, I'm gonna read a couple of them.
309
00:20:13,716 --> 00:20:17,776
So CRUD controller, this is an extendable
controller that turns standard CRUD
310
00:20:17,776 --> 00:20:22,375
endpoints into a few lines of code. This
is good for ad- admin interfaces and APIs.
311
00:20:22,436 --> 00:20:28,315
This one is interesting, an API response
trait. So deciding how you want to send
312
00:20:28,316 --> 00:20:34,556
back JSON responses from an API can be a
bit of a challenge. Um, if you've not
313
00:20:34,556 --> 00:20:38,356
decided already on a convention and you're
deciding for the first time, maybe this
314
00:20:38,356 --> 00:20:41,956
would be something you'd reach for. It
allows you to standardize those JSON
315
00:20:41,956 --> 00:20:46,816
responses across your app. Success, error,
paginated responses, your front end will
316
00:20:46,816 --> 00:20:51,005
thank you if you can make sure that these
are always consistent and the same. Uh, if
317
00:20:51,005 --> 00:20:54,856
you've ever had to deal with uploading or
deleting or reading file contents for
318
00:20:54,856 --> 00:20:58,336
single or multipile- multiple file
uploads, there's a trait for this. So you
319
00:20:58,336 --> 00:21:01,666
don't have to do any of that boilerplate.
You just include this file processing
320
00:21:01,666 --> 00:21:06,216
trait and it turns that controller into,
like, a single method and three lines.
321
00:21:06,216 --> 00:21:11,796
Pretty cool. Um, validation helper traits.
Access log middleware, so it logs all
322
00:21:11,796 --> 00:21:15,136
your incoming requests for traceability,
audits, performance insights. There's a
323
00:21:15,136 --> 00:21:18,876
caching utility. There's a configuration
utility. There's an OpenAI provider. Bunch
324
00:21:18,876 --> 00:21:21,976
of different things in here, I'm not
gonna read through all of them or the
325
00:21:21,976 --> 00:21:25,916
examples. Uh, suffice it to say, if this
is something that you would be interested
326
00:21:25,916 --> 00:21:32,176
in, you can find it in the show notes or
you can find it at github.com/... Well,
327
00:21:32,176 --> 00:21:34,436
it's not even worth reading it. It's too,
it's too hard. You're gonna have to go
328
00:21:34,436 --> 00:21:38,886
look at the show notes. Uh, thank you,
Omar, for submitting this one. Uh, sending
329
00:21:38,886 --> 00:21:39,416
this along.
330
00:21:41,316 --> 00:21:45,886
Lara dumps. Lara dumps...
331
00:21:45,886 --> 00:21:48,236
-Mm.
-... is a powerful and user-friendly
332
00:21:48,236 --> 00:21:49,876
-debugging out by-
-Did you see all the stuff on Twitter about
333
00:21:49,876 --> 00:21:52,356
-this?
-Look.
334
00:21:52,356 --> 00:21:57,596
-Uh-
-People are nothing if not juvenile.
335
00:21:57,596 --> 00:21:59,785
Yes, they are. That is right. Sorry, I
interrupted. Go ahead, my friend.
336
00:21:59,785 --> 00:22:04,396
Lara dumps is a powerful and user-friendly
debugging app that revolutionizes how you
337
00:22:04,396 --> 00:22:08,476
debug Laravel applications. Unlike
traditional debugging methods that
338
00:22:08,476 --> 00:22:12,796
interrupt your application flow or clutter
your browser output, Lara dumps displays
339
00:22:12,796 --> 00:22:18,056
your debugging information in a clean,
organized, standalone desktop application.
340
00:22:18,056 --> 00:22:22,816
The core tools provided by the, uh,
application are framework agnostic and
341
00:22:22,816 --> 00:22:27,396
should be compatible with any PHP project.
However, specific tools for debugging
342
00:22:27,396 --> 00:22:30,896
Laravel and Livewire projects are
included, and also works while testing
343
00:22:30,896 --> 00:22:35,496
your software with Pest. Main features
includes keeping your app running without
344
00:22:35,496 --> 00:22:38,416
interrupting the application flow. There
is a persistent history
345
00:22:39,136 --> 00:22:43,416
between page refre- refreshes, dedicated
interface, multiple dumps, beautiful
346
00:22:43,416 --> 00:22:44,876
formatting, and real-time
347
00:22:45,556 --> 00:22:50,916
updates. The package also offers Xdebug
integration for step-by-step debugging
348
00:22:50,916 --> 00:22:54,656
with full Xdebug support, along with a
variable inspector that provides beautiful
349
00:22:54,656 --> 00:22:57,726
and readable formatting for any variable
type.
350
00:22:59,116 --> 00:23:02,276
The desktop application features
multiscreen support, enabling developers
351
00:23:02,276 --> 00:23:05,656
to organize debug output across multiple
windows. And the interface includes a
352
00:23:05,656 --> 00:23:09,776
theme system with multiple themes powered
by Daisy UI, and offers a table view to
353
00:23:09,776 --> 00:23:14,436
display arrays and objects in searchable
tables. It also provides a specialized
354
00:23:14,436 --> 00:23:17,716
tools for Laravel development. The route
list feature allows developers to view all
355
00:23:17,716 --> 00:23:21,556
registered Laravel routes, while the
model inspector enables examination of
356
00:23:21,556 --> 00:23:25,716
Eloquent model attributes. Here are some
screenshots. It is a very
357
00:23:26,436 --> 00:23:31,856
good-looking application. Uh, it is, you
know, out there in a similar vein to
358
00:23:31,856 --> 00:23:36,456
things like, obviously, Herd's built-in
debugging to Ray. It's another option in
359
00:23:36,456 --> 00:23:41,776
the ecosystem, once again demonstrating
that the PHP ecosystem is thriving and
360
00:23:41,776 --> 00:23:46,536
well, uh, and there is lots of stuff out
there for... You know? Courses for
361
00:23:46,536 --> 00:23:50,836
courses, different things for different
people. So thanks very much to Yannick for
362
00:23:50,836 --> 00:23:52,536
putting this article together.
363
00:23:53,316 --> 00:23:59,576
Lara dumps. All right. Moving on, we have
Laravel Starter Kit by Nuno
364
00:23:59,576 --> 00:24:05,876
Maduro. Another one by Nuno. So, there are
a number of things that we've talked
365
00:24:05,876 --> 00:24:09,616
about in the last year and a half, I
suppose you could say, that feel like
366
00:24:09,616 --> 00:24:10,196
opt-in
367
00:24:11,116 --> 00:24:15,026
features that have been pushed into the
framework that you can sort of turn on but
368
00:24:15,026 --> 00:24:21,210
you don't have to. Um, some of those
would be things like strict models....
369
00:24:21,210 --> 00:24:27,879
auto eager loading, immutable dates,
forcing HTTPS, uh, safe console so that
370
00:24:27,879 --> 00:24:30,560
you can make sure you don't do things that
in production that you should not do,
371
00:24:30,560 --> 00:24:34,1000
like drop the database or something like
that. Um, asset pre-fetching, et cetera.
372
00:24:35,000 --> 00:24:41,700
All these different things, not allowing
n+1 queries. Those, right? Um,
373
00:24:41,760 --> 00:24:47,980
Nunos Starter Kit is a Laravel skeleton
for those people who demand meticulous
374
00:24:47,980 --> 00:24:52,760
precision in their projects. It is
enforcing strictness and type coverage,
375
00:24:52,760 --> 00:24:59,680
formatting, maxed static analysis, and
more. So all of the PHPStan, Pest,
376
00:24:59,680 --> 00:25:03,740
Rector, Pint, and Prettier settings are
pre-configured to be as strict as
377
00:25:03,740 --> 00:25:10,740
possible. So 100% type code coverage, PHP
level max, Rector with max, uh, privi-
378
00:25:10,740 --> 00:25:16,620
priviz- privatization? Privatization, I
guess? Um, and then also enhanced tests
379
00:25:16,620 --> 00:25:22,899
and defaults like, um, you know, the Pest
type coverage requires a minimum of
380
00:25:22,899 --> 00:25:23,710
100%.
381
00:25:24,340 --> 00:25:24,840
Um, so
382
00:25:25,440 --> 00:25:29,820
it's... For those of us who are starting a
brand new project, and you really wanna
383
00:25:29,820 --> 00:25:32,870
make sure you're getting off on the right
foot, this Laravel Skeleton is a great way
384
00:25:32,870 --> 00:25:38,940
to start. It's also, if you wanted to, a
way to sort of say, "Okay, if I wanted to
385
00:25:38,940 --> 00:25:42,260
get 100, this is what I'd do," but you can
also dial it back, right? Some of it is
386
00:25:42,260 --> 00:25:45,820
just useful to have as a, "If I wanted to
configure these things and I've not
387
00:25:45,820 --> 00:25:48,100
configured them before, how would I do so
388
00:25:49,100 --> 00:25:52,060
if I was on Team Laravel and setting this
up for the first time?" So you could go
389
00:25:52,060 --> 00:25:55,879
look at the GitHub, you know, the .GitHub
folder in these and kinda see how these
390
00:25:55,879 --> 00:26:00,159
actions are running. Um, or how would I
configure some of these things? It's also
391
00:26:00,159 --> 00:26:04,620
good just for that as well, just for
reference. So take it for what it is, um,
392
00:26:04,620 --> 00:26:09,159
pretty interesting though, and, um, easy
to get started with as well. So it has
393
00:26:09,159 --> 00:26:15,159
some example text at the bottom here that
you would put in to get started, uh,
394
00:26:15,159 --> 00:26:19,580
including the creating the project with
Composer, CDing in, then Composer install,
395
00:26:19,580 --> 00:26:23,920
NPM install, et cetera, et cetera. It's
down the list you go. So, um, good stuff
396
00:26:23,920 --> 00:26:26,980
there. Yeah, what do you think, Michael?
Would you use that?
397
00:26:27,740 --> 00:26:32,760
No, uh, look, I have enough pain and
suffering with PHPStan at level 5. I
398
00:26:32,760 --> 00:26:33,040
don't-
399
00:26:33,679 --> 00:26:38,559
Even just going from 5 to 6 is giving me
nightmares. So I'll just, I'll just leave
400
00:26:38,560 --> 00:26:39,460
this for other people.
401
00:26:40,080 --> 00:26:41,360
-There you go.
-Enjoy it if you d- if you want to.
402
00:26:41,360 --> 00:26:45,340
Next time I start a new project, maybe.
Right? Maybe.
403
00:26:45,340 --> 00:26:48,879
-You, you will unravel very quickly.
-I believe that.
404
00:26:48,879 --> 00:26:49,470
-If you're anything-
-I believe that
405
00:26:49,470 --> 00:26:50,089
... like me.
406
00:26:51,320 --> 00:26:51,980
I am.
407
00:26:52,240 --> 00:26:52,770
I am. So
408
00:26:53,860 --> 00:26:55,470
I'll take your word for it, my friend. All
right.
409
00:26:55,470 --> 00:26:56,619
-Yeah.
-On we go.
410
00:26:56,620 --> 00:27:01,139
The Gemini package for Laravel, developed
by Houssein Hazami, is a package designed
411
00:27:01,139 --> 00:27:06,480
to integrate with the Google Gemini API.
It supports text, image, video, audio,
412
00:27:06,480 --> 00:27:11,119
long context structured output function
calling, and understanding capabilities.
413
00:27:11,120 --> 00:27:16,080
The package also supports streaming
responses using the stream method. Main
414
00:27:16,080 --> 00:27:20,620
pages include text generation with both
context and history, image generation and
415
00:27:20,620 --> 00:27:23,900
understanding, video generation and
analysis, audio synthesis and
416
00:27:23,900 --> 00:27:27,520
transcription, document processing and
understanding, embeddings generation, file
417
00:27:27,520 --> 00:27:31,629
management capabilities, real time
streaming, responses, and configurable
418
00:27:31,629 --> 00:27:36,940
safety settings. There is a whole suite of
these different integrations for
419
00:27:36,940 --> 00:27:40,860
different reasons, for different models
that will keep evolving. You know, we're
420
00:27:40,860 --> 00:27:46,040
in this state of flux, I think, with, uh,
API at the moment, and, uh, it's good to
421
00:27:46,040 --> 00:27:50,179
have options. Uh, I know that we have
spoken about Prism before. TJ spoke about
422
00:27:50,179 --> 00:27:50,730
-Prism-
-Mm-hmm. Yep
423
00:27:50,730 --> 00:27:56,720
... at Laracon US this year. If there is a
chance that you want to move between
424
00:27:56,720 --> 00:28:01,850
different providers and wanna sw- swap
things out really simply, then Prism would
425
00:28:01,850 --> 00:28:07,220
probably be the way to go. If you just
want to use Gemini and always use Gemini,
426
00:28:07,220 --> 00:28:07,480
then
427
00:28:08,280 --> 00:28:12,400
definitely check out something like this,
you know, provider-specific, uh,
428
00:28:12,400 --> 00:28:18,280
application, uh, packages. So we'll have
links to that for you in the show notes.
429
00:28:18,280 --> 00:28:24,120
Very cool. I can see the little one has
crashed our party. Hey, what's up, kiddo?
430
00:28:25,300 --> 00:28:27,659
This is the best part of the show, guys
and girls,
431
00:28:28,260 --> 00:28:31,560
where the kids enter and just get to say
hello. She should wave to the camera.
432
00:28:31,560 --> 00:28:32,940
-Oh. Yeah.
-Oh, too late.
433
00:28:32,940 --> 00:28:33,600
-Oh, she's gone.
-Oh.
434
00:28:33,600 --> 00:28:37,960
It's, uh, school holidays, and they are,
they are home today with mom, who does
435
00:28:37,960 --> 00:28:41,990
-not... doesn't have them. Look-
-We are not gonna complain
436
00:28:41,990 --> 00:28:43,250
-... at this age-
-We are happy to see them.
437
00:28:43,250 --> 00:28:46,060
At this age, they do whatever they want to
do-
438
00:28:46,060 --> 00:28:47,710
-That is correct
-... for the most part. So you can't, you
439
00:28:47,710 --> 00:28:49,560
-can't s-
-It is their house too. Yep.
440
00:28:49,560 --> 00:28:50,159
-That's right.
-Absolutely.
441
00:28:50,159 --> 00:28:53,220
You could tell... I, I've told them, like,
if the door's shut, it means that I'm in
442
00:28:53,220 --> 00:28:56,920
a meeting, whether it's this or it's with,
you know, work people, do- doesn't
443
00:28:56,920 --> 00:28:57,780
-matter.
-Nope, absolutely not.
444
00:28:57,780 --> 00:29:01,020
Doesn't matter when, when they're looking,
when they're looking for their Elsa doll,
445
00:29:01,020 --> 00:29:04,220
or they're looking for their toy, they
come in and look for it. No matter what.
446
00:29:04,220 --> 00:29:06,960
All bets are off. No holds barred. I got
it.
447
00:29:06,960 --> 00:29:10,540
-We love them. We love them all.
-We do, we absolutely do. All right, folks,
448
00:29:10,540 --> 00:29:17,379
another package here. Building Terminal
UIs in PHP with ANSI Kit. Now, you might
449
00:29:17,379 --> 00:29:21,740
think to yourself, "Why do we need this?
Don't we already have Laravel Prompts?"
450
00:29:21,740 --> 00:29:25,200
Ah, yes, you do, but then it would be
dependent on making sure that you're using
451
00:29:25,200 --> 00:29:28,240
Laravel. And in that case, you'd say,
"Well, isn't this the Laravel News
452
00:29:28,240 --> 00:29:33,400
Podcast?" To which I would say, "Yes, it
is." But not all of us get to use Laravel
453
00:29:33,400 --> 00:29:38,679
all the time. So if you are stuck in a
project which is just PHP, or you'd rather
454
00:29:38,679 --> 00:29:41,320
not be using Laravel Prompts, you're
looking for something else, no problem,
455
00:29:41,320 --> 00:29:46,129
we've got you covered. ANSI Kit is a zero
dependency ANSI escape helper for building
456
00:29:46,129 --> 00:29:51,600
terminal UIs in PHP. Uh, so no
dependencies, right? That is the trick
457
00:29:51,600 --> 00:29:54,800
here. It is dependent on nothing. You
include this in your project, and you are
458
00:29:54,800 --> 00:29:59,340
good to go. So it's got a chainable API
for styles, colors, and cursor control
459
00:29:59,340 --> 00:30:03,260
along with useful components and
utilities. You might be reminded that in
460
00:30:03,260 --> 00:30:08,040
addition to Laravel Prompts, we also have
had something like this, uh, I think come
461
00:30:08,040 --> 00:30:11,019
out after Laravel Prompts, which was
talking specifically about some of these
462
00:30:11,020 --> 00:30:13,980
things. I think Aaron Francis actually had
something like this, where it was dealing
463
00:30:13,980 --> 00:30:18,724
with different colors and things like
that. So...So, um, in any case, these are
464
00:30:18,724 --> 00:30:22,324
difficult problems to solve. Multiple
people have solved them their own ways.
465
00:30:22,324 --> 00:30:26,624
Um, but this includes things like being
able to style colors, like the background,
466
00:30:26,624 --> 00:30:31,944
the foreground. It includes RGB, uh, 256
is another thing that it says here.
467
00:30:31,944 --> 00:30:35,344
There's like two 56, 156 colors, I'm
guessing is what it's saying. It includes
468
00:30:35,344 --> 00:30:39,244
the ability to style using bold, italic,
underline or dim. Uh, you can clear the
469
00:30:39,244 --> 00:30:44,444
screen, clear a line, clear from, on, up
to a particular pla- place. You can jump
470
00:30:44,444 --> 00:30:48,824
the cursor around, and then it also ships
with components like tables, banners and
471
00:30:48,824 --> 00:30:53,684
progress bars. So there's a screenshot
inside of the blog post here that shows a
472
00:30:53,684 --> 00:30:58,144
bunch of the different, um, components
that ship with it. There's some example
473
00:30:58,144 --> 00:31:02,224
code for how exactly you would get this
running in your project, and then there is
474
00:31:02,224 --> 00:31:05,944
a listing of all the different features
and components that they have. Let me list
475
00:31:05,944 --> 00:31:08,864
a couple of them here. I said what...
Some of them already, but I'll name some
476
00:31:08,864 --> 00:31:12,644
of them again. TableComponent,
BannerComponent, ProgressBar, Spinner,
477
00:31:12,644 --> 00:31:17,324
Choice, Keypress, InputHelper and more. So
Paul Rudman thought this one was worth a
478
00:31:17,324 --> 00:31:21,204
write-up. We will trust that it is, in
fact, a pretty awesome library. Thanks,
479
00:31:21,204 --> 00:31:24,504
Paul, for writing this right one up.
Everyone's favorite human, got to say it
480
00:31:24,504 --> 00:31:26,524
at least once a show. All right, Michael,
back to you.
481
00:31:26,524 --> 00:31:33,184
At least. Um, tutorial time. You have
helpfully, I was gonna say handily, but
482
00:31:33,184 --> 00:31:38,544
helpfully split this up into t- tutorials,
Livewire-specific tutorials, framework
483
00:31:38,544 --> 00:31:40,844
reminders and videos. And I
484
00:31:41,504 --> 00:31:43,404
am just gonna read through all the
headlines and leave-
485
00:31:43,404 --> 00:31:45,634
-That's better
-... the links to each of them in the show
486
00:31:45,634 --> 00:31:50,144
notes for you to follow up. So tutorials
first, debugging and logging in Laravel
487
00:31:50,144 --> 00:31:53,744
applications. The team at Sentry recently
published a helpful guide on how to make
488
00:31:53,744 --> 00:31:57,364
the most of Laravel's built-in debugging
and logging tools, and how to use Sentry
489
00:31:57,364 --> 00:32:01,044
to debug Laravel apps in production
effectively. There is an introduction to
490
00:32:01,044 --> 00:32:07,024
MongoDB and Laravel MongoDB setup. There
is the hidden cost of MySQL defaults in
491
00:32:07,024 --> 00:32:09,324
Laravel apps. I don't know what is going
on with this
492
00:32:10,264 --> 00:32:12,964
image. This... There's a horse, there's a
girl with a lollipop.
493
00:32:12,964 --> 00:32:16,564
-It looks very creepy. Yeah, it's, it's-
-The hidden cost-
494
00:32:16,564 --> 00:32:18,844
-It's-
-... is apparently creepy Wednesday
495
00:32:18,844 --> 00:32:23,324
Addams-esque imagery. I don't know what is
happening.
496
00:32:24,684 --> 00:32:26,464
-All right. My-
-I will say this one is one of the most
497
00:32:26,464 --> 00:32:29,384
interesting ones to me. This one was
written up by Eric Barnes. But it's
498
00:32:29,384 --> 00:32:35,104
basically like if you just start MySQL and
just ship it and you don't do anything
499
00:32:35,104 --> 00:32:37,564
-with, like, your, you know, DB pool size-
-Mm-hmm
500
00:32:37,564 --> 00:32:41,964
... holy cow, we have run into this
recently, and it was a pain. So if you
501
00:32:41,964 --> 00:32:42,334
-have not-
-Yeah
502
00:32:42,334 --> 00:32:46,794
... looked at any of these things, it's
definitely worth looking at once. And then
503
00:32:46,794 --> 00:32:50,784
it's also some tools like MySQL Tuner.
Like, what... You know, that'll... It's
504
00:32:50,784 --> 00:32:53,614
basically gonna run some stuff that's
gonna tell you, "Oh, you're not doing this
505
00:32:53,614 --> 00:32:55,524
-efficiently. You should check this out."
-Yeah.
506
00:32:55,524 --> 00:32:57,804
I am reading this as soon as our show is
done. So-
507
00:32:57,804 --> 00:32:59,144
-Absolutely
-... just telling you. This one looks
508
00:32:59,144 --> 00:33:03,024
-really good.
-Mm-hmm. Uh, and I... Anyway, as promised,
509
00:33:03,024 --> 00:33:07,324
Livewire session properties for persistent
component state, Livewire
510
00:33:07,324 --> 00:33:13,244
wireclick.preventDefault for form
handling. We also have two more of, uh,
511
00:33:13,244 --> 00:33:17,564
Harris'... What do we call it? Advanced,
efficient-
512
00:33:17,564 --> 00:33:19,264
-Mm-hmm
-... effective. I really should write it
513
00:33:19,264 --> 00:33:22,214
down. Harris' series on
514
00:33:22,844 --> 00:33:25,974
-writing good Lara... Testing your-
-Testing, yeah
515
00:33:25,974 --> 00:33:29,564
... reporting system with Laravel
factories and assertions and profiling
516
00:33:29,564 --> 00:33:34,804
Laravel, how to find hidden performance
killers. And then lastly, three framework
517
00:33:34,804 --> 00:33:38,604
reminders for you this week. Laravel
collection pluck method gains closure
518
00:33:38,604 --> 00:33:42,664
transformation power, Laravel
configuration arrays made simpler with
519
00:33:42,664 --> 00:33:48,183
config collection, and Laravel custom
validation rules for enhanced data
520
00:33:48,184 --> 00:33:52,764
integrity. That is all of the tutorials
this week. I will have links to them all
521
00:33:52,764 --> 00:33:58,534
for you in the show notes. Make sure you
check them out on YouTube, on, uh, in, in
522
00:33:58,534 --> 00:34:01,904
your podcatcher of choice. All of the
links are there.
523
00:34:01,904 --> 00:34:04,964
Absolutely. They are, they are in your
podcatcher of choice. They've gotten
524
00:34:04,964 --> 00:34:09,083
the... They're all broken down. Uh, it's
really well done and you can actually
525
00:34:09,083 --> 00:34:11,984
click around to the different sections
inside of the podcast as well if you're
526
00:34:11,984 --> 00:34:15,184
only interested in this particular pieces.
"Uh, that's one I'm interested in, let me
527
00:34:15,184 --> 00:34:18,144
click through that one." You can skip
through the rest of them, that's fine too.
528
00:34:18,144 --> 00:34:21,424
Folks, Episode 246, the one you just
listened to, you can find show notes for
529
00:34:21,424 --> 00:34:26,384
this at podcast.laravel-news.com/246. We'd
really appreciate it if you'd rate us up
530
00:34:26,384 --> 00:34:29,444
in your podcatcher of choice, as we spoke
about. Five stars would be incredible. And
531
00:34:29,444 --> 00:34:32,083
if you have any questions or comments,
we'd love to hear from you on X, on
532
00:34:32,083 --> 00:34:36,924
BlueSky, @JacobBennett, @MichaelDeRenda,
or @Laravel News. Folks, until next time,
533
00:34:36,924 --> 00:34:41,164
-it's been wonderful. We'll see you.
-Bye.