
Laravel News Podcast
ยทE243
Boost, Inertia Forms, and multiple personas
Episode Transcript
1
00:00:03,959 --> 00:00:08,779
This is the Laravel News Podcast, your
one-stop podcast to find out about
2
00:00:08,779 --> 00:00:14,179
Laravel-related news, tutorials, packages,
and more. Here are your hosts, Jake
3
00:00:14,179 --> 00:00:15,959
Bennett and Michael Dyrynda.
4
00:00:30,699 --> 00:00:34,380
Hello, all you wonderful, lovely people
out there in Laravel land. This is episode
5
00:00:34,380 --> 00:00:40,099
242 of the Laravel News Podcast. It is
August 18th, 2025. And Michael, my friend,
6
00:00:40,099 --> 00:00:41,739
I was just caught in a downpour.
7
00:00:42,379 --> 00:00:43,139
-We were-
-Downpour, yeah
8
00:00:43,139 --> 00:00:47,880
... just getting ready to get started, and
I was late to come to the chat. And you
9
00:00:47,880 --> 00:00:50,139
were like, "Where are you?" Like, d- you
were literally just-
10
00:00:50,139 --> 00:00:51,139
-You were just here
-... here a minute ago.
11
00:00:51,799 --> 00:00:55,719
And then I came on, and like, you know, if
you would have seen me two minutes
12
00:00:55,719 --> 00:00:59,639
before, I was absolutely soaking wet.
There was... We have our outdoor furniture
13
00:00:59,639 --> 00:01:02,979
that I try and cover up. It's got
cushions on it, right? So if it's gonna be
14
00:01:02,979 --> 00:01:07,339
raining, I try and cover it up. And I
realized, like, like 30 seconds into it
15
00:01:07,339 --> 00:01:10,319
starting to rain, and not just a little
rain, like, a lot of rain-
16
00:01:10,319 --> 00:01:13,319
-A lot.
-I'm like, "Oh, no, the furniture isn't
17
00:01:13,319 --> 00:01:18,399
covered." So I ran out there. Oh, my word.
Got absolutely soaked. And so, yeah, had
18
00:01:18,399 --> 00:01:21,119
-a good change real quick. So...
-The furniture's fine. Yeah. We, we had...
19
00:01:21,119 --> 00:01:24,639
We've got, like, outdoor furniture and we
had a cover for it, but the sun here-
20
00:01:24,639 --> 00:01:28,139
-Yeah. Yeah
-... is awful. So the cover just got-
21
00:01:28,959 --> 00:01:29,859
-Yeah
-... like, it just-
22
00:01:29,859 --> 00:01:31,759
-Destroyed.
-What's the word? It got... It destroyed.
23
00:01:31,759 --> 00:01:34,099
-It was like...
-Baked. Like, sunbaked?
24
00:01:34,099 --> 00:01:37,139
Yeah. Baked. Yeah. It just, like, became
so brittle that, like, you-
25
00:01:37,139 --> 00:01:38,819
-Yeah. Yeah. Yeah
-... you'd touch it and it would poke a
26
00:01:38,819 --> 00:01:42,199
hole in it. So... And it's like one of
those things that I don't know where to f-
27
00:01:42,199 --> 00:01:47,079
to find, like, a cover that fits, 'cause
it's like an L-shaped piece of furn-... I
28
00:01:47,079 --> 00:01:47,939
-suppose we could, like-
-Mm-hmm
29
00:01:47,939 --> 00:01:50,119
-... stack it so it becomes a square-
-Yeah. Yeah
30
00:01:50,119 --> 00:01:52,099
-... that's a whole...
-Amazon, Amazon has these really one-
31
00:01:52,099 --> 00:01:55,379
really good ones. Like, that's actually...
'Cause my, my covers last year, they,
32
00:01:55,379 --> 00:01:56,559
-they lasted one year and they were-
-Yeah
33
00:01:56,559 --> 00:01:57,819
-... garbage.
-They disintegrate-
34
00:01:57,819 --> 00:01:58,879
-And so these ones-
-... is what I was looking for.
35
00:01:58,879 --> 00:02:00,599
-Yeah. They disintegrate. Exactly. Yeah.
-Mm-hmm.
36
00:02:00,599 --> 00:02:03,079
And so these ones are actually pretty
decent. I've gotten the same brand of
37
00:02:03,079 --> 00:02:07,739
Amazon covers on all my... Like, my wood
cover, my grill cover, my... All of them.
38
00:02:07,739 --> 00:02:09,399
-They're all, they're all good. So...
-Nice. I have to check them out.
39
00:02:09,399 --> 00:02:11,339
-I'll send you the link, folks. Uh-
-Yeah.
40
00:02:11,339 --> 00:02:14,639
You know. A referral link, affiliate
links, uh, incoming-
41
00:02:14,639 --> 00:02:16,499
-It's fine.
-... in the show notes, folks. Gotta make
42
00:02:16,499 --> 00:02:16,899
that money.
43
00:02:17,579 --> 00:02:21,619
Well, hey, everybody. Uh, we were... Two
weeks ago, I guess a couple more... Three
44
00:02:21,619 --> 00:02:26,419
weeks ago, right, we were at LyraCon,
which was amazing. So fun. Had a great
45
00:02:26,419 --> 00:02:30,899
time. And we were able to record some
recaps while we were there. So the last
46
00:02:30,899 --> 00:02:34,959
episode was just sort of a cut of those
recaps that we were able to do while we
47
00:02:34,959 --> 00:02:38,799
were there at the conference. Michael and
I together reunited for the first time in,
48
00:02:38,799 --> 00:02:41,959
like, six years, able to record those
podcasts together, which was super fun.
49
00:02:42,619 --> 00:02:46,579
But we are back remote again today. So
we're gonna be covering, as always,
50
00:02:46,579 --> 00:02:50,959
releases, news, packages, and more.
Michael, thank you for putting the show
51
00:02:50,959 --> 00:02:53,559
notes together while I was out in the
rain. I'm gonna let you take this first
52
00:02:53,559 --> 00:02:56,999
-one, Laravel Boost. Talk to us about it.
-No worries. Yeah. Laravel Boost was,
53
00:02:57,659 --> 00:03:01,159
I guess, like, a little bit of a surprise
out of left field-
54
00:03:01,159 --> 00:03:03,339
-Yeah. It was
-... to be honest, when, when it came down
55
00:03:03,339 --> 00:03:08,299
to it. Um, Ashley Hindle, who had only
been at Laravel for
56
00:03:09,619 --> 00:03:13,099
four weeks, I think he said, when I spoke
to him at the time... So, like, this is
57
00:03:13,099 --> 00:03:17,819
what he did in, quote unquote, four weeks.
I know that he's credited Peter Soon to
58
00:03:17,819 --> 00:03:23,519
some, um, some of the MCP stuff that he
was working on. Peter, Peter being, uh,
59
00:03:23,519 --> 00:03:26,999
one of the Tailwind Labs team, 'cause they
were both working on an MCP server for
60
00:03:26,999 --> 00:03:31,599
Laravel. So Laravel Boost is a AI coding
starter kit that is designed to make
61
00:03:31,599 --> 00:03:36,079
working with AI agents better. Uh, it does
this by feeding them Laravel-specific
62
00:03:36,079 --> 00:03:40,559
data to help them write higher quality
code. And Ashley Hindle described it as a,
63
00:03:40,559 --> 00:03:45,579
um, as Boost helps guide the AI to do
better. So this was announced, as I
64
00:03:45,579 --> 00:03:50,579
mentioned, at Laricon, Laricon US, and it
includes three main features. The first is
65
00:03:50,579 --> 00:03:54,479
that it provides a Laravel-specific MCP
server with, at the time of this
66
00:03:54,479 --> 00:03:58,659
recording, 15 tools to help you in your
day-to-day work, which helps your AI
67
00:03:58,659 --> 00:04:02,419
agents to query the database, run code
through Tinker, and search through
68
00:04:02,419 --> 00:04:03,979
up-to-date documentation.
69
00:04:04,659 --> 00:04:08,499
It is version-specific documentation, so
all the Laravel ecosystem docs have been
70
00:04:08,499 --> 00:04:12,479
ingested and vectorized and should have
fewer hallucinations, and this includes
71
00:04:12,479 --> 00:04:17,219
things like Inertia, Livewire, Flux,
Filament and so on. So you get the most
72
00:04:17,219 --> 00:04:21,419
relevant information, and it does this by
parsing your composer.json and identifying
73
00:04:21,419 --> 00:04:24,879
not only what packages you're running,
but what versions they are and kind of
74
00:04:24,879 --> 00:04:26,859
constraining the guidelines
75
00:04:27,539 --> 00:04:33,239
to those versions. And the guidelines
themselves are maintained by Laravel, and
76
00:04:33,239 --> 00:04:37,899
it can create rules for Cursor, for Junee,
for GitHub Copilot. Um, it'll create your
77
00:04:37,899 --> 00:04:42,599
clawd.md files. And the team has manually
create- uh, curated those guidelines,
78
00:04:42,599 --> 00:04:46,359
including version-specific ones for
Laravel. For example, there are guidelines
79
00:04:46,359 --> 00:04:52,179
for Inertia 1 or 2 to help the AI agent
behave appropriately in your projects. You
80
00:04:52,179 --> 00:04:55,359
can check out the GitHub repo for Boost.
We will have links to that in the show
81
00:04:55,359 --> 00:04:59,979
notes. Uh, our very own Eric Barnes sat
down and spoke with Ashley Hindle to talk
82
00:04:59,979 --> 00:05:04,279
about, uh, what Boost is and, uh, how it
all came together behind the scenes.
83
00:05:04,279 --> 00:05:07,719
Harris Raftopoulos has put together a
video on getting up and running. I know
84
00:05:07,719 --> 00:05:11,399
that Nuno's done some videos on it. I know
that Ashley's put out a video. I know
85
00:05:11,399 --> 00:05:13,679
Ashley sat down with Matt Stauffer for the
Laravel podcast.
86
00:05:13,679 --> 00:05:16,159
-Yep. Yep.
-There is a lot of content out there at the
87
00:05:16,159 --> 00:05:21,739
moment. Um, I, I had... I have jumped on
the bandwagon. I know that... Tho- those
88
00:05:21,739 --> 00:05:24,559
of you who've been listening for a while
know that I'm a bit of an AI nuffy, but-
89
00:05:24,559 --> 00:05:30,459
... Aaron Francis, credit to him, has
finally shown me exactly how and why I
90
00:05:30,459 --> 00:05:35,539
would want to use it and in what ways that
it is most powerful. So thank you to
91
00:05:35,539 --> 00:05:38,879
Aaron. If you haven't seen his video,
we'll have links to that. Um,
92
00:05:39,539 --> 00:05:43,299
and I mentioned that Harris has put
together a video. Um, we have some more
93
00:05:43,299 --> 00:05:46,159
context about that as well, but he
basically talks through supercharging your
94
00:05:46,159 --> 00:05:52,119
Laravel projects and getting a real AI
coding, uh, boost. So, uh, in, in the
95
00:05:52,119 --> 00:05:57,515
video he talks about installing Boost and
setting it up.Um, configuring the MPC- uh,
96
00:05:57,515 --> 00:06:01,555
sorry, MCP server to enable
Laravel-specific AI tools, integrated
97
00:06:01,555 --> 00:06:05,396
version-specific documentation using the
AI system to generate and test a Livewire
98
00:06:05,396 --> 00:06:09,356
image upload component. It'll run and
debug your automated tests. It'll handle
99
00:06:09,356 --> 00:06:13,595
migrations and validation. It shows, uh,
he shows how you can use Tinker and other
100
00:06:13,595 --> 00:06:17,536
tools directly through the AI- AI agent.
So you can specifically ask it to query
101
00:06:17,536 --> 00:06:20,515
your database and say, "How many users are
in my application?"
102
00:06:21,135 --> 00:06:25,415
Um, he also showed how Boost provides
smarter context to our code suggestions,
103
00:06:25,415 --> 00:06:28,655
uh, adding and managing fake images in the
app using AI-powered commands,
104
00:06:28,655 --> 00:06:32,275
highlighting the open source nature of
Laravel Boost, uh, which it- w- we
105
00:06:32,275 --> 00:06:36,615
include. Uh, there'll be a large community
feedback portion as well, so I expect
106
00:06:36,615 --> 00:06:41,235
these, these tools, these guidelines, um,
and all of this stuff to get better over
107
00:06:41,235 --> 00:06:45,235
time as the community provides, uh, more
documentation, provides more...
108
00:06:45,235 --> 00:06:47,135
-Yeah
-... uh, specific guidelines. I think
109
00:06:47,135 --> 00:06:47,655
Ashley
110
00:06:48,356 --> 00:06:51,935
said when he was on the Laravel news pod-
uh, on the Laravel podcast with Matt
111
00:06:51,935 --> 00:06:56,295
Stouffer that, you know, the expectation
is that the community will help to shape
112
00:06:56,295 --> 00:06:58,395
things, and it's not about dictating
113
00:06:58,995 --> 00:07:02,495
the one way, it's about coming together as
a community in figuring out how to do it.
114
00:07:02,495 --> 00:07:06,155
So shout out to everyone putting together
all that content. So much of it, it
115
00:07:06,155 --> 00:07:10,695
almost feels like Larav- uh, Laravel is a
big boy company, and they've... All of
116
00:07:10,695 --> 00:07:12,295
this stuff was coordinated. It all came
out
117
00:07:13,155 --> 00:07:16,395
straight after the, the project was
released. So shout out to everyone that
118
00:07:16,395 --> 00:07:17,995
has been involved in that process.
119
00:07:18,695 --> 00:07:21,915
Absolutely. Yeah, really, really good job.
And like you said, it was out of left
120
00:07:21,915 --> 00:07:25,215
field, but it was so well-coordinated and
everything, kind of all at the same time.
121
00:07:25,215 --> 00:07:29,075
It was, it was really nice to know that,
like, leaving that conference, it wasn't
122
00:07:29,075 --> 00:07:31,835
like, "And will be released in six
months." It was like-
123
00:07:31,835 --> 00:07:33,475
-Right
-... in two weeks. You know what I mean?
124
00:07:33,475 --> 00:07:36,895
-Yeah, straight away, basically.
-So they got it all out there and, uh,
125
00:07:36,895 --> 00:07:40,675
functioning well. Really excited to, to
dig into some of that. And we've already
126
00:07:40,675 --> 00:07:45,455
got, um, got it installed in two of our
applications, two of our big ones, and so
127
00:07:45,455 --> 00:07:48,235
the developers and the team are already
using that and loving it. So pretty cool
128
00:07:48,235 --> 00:07:50,335
stuff. Thank you to the team for that one.
129
00:07:51,155 --> 00:07:56,755
Well, uh, Inertia releases a new form
component as well. Paul Redmond wrote this
130
00:07:56,755 --> 00:08:01,375
one up. So the Laravel team released a
new form component for Inertia. So what
131
00:08:01,375 --> 00:08:06,275
this does is it provides a component that
behaves like a classic HTML form, but
132
00:08:06,275 --> 00:08:11,375
under the hood it's using Inertia so that
you can avoid full-page reloads. So
133
00:08:11,375 --> 00:08:15,235
there's an example in the documentation
that illustrates really how simple it is
134
00:08:15,235 --> 00:08:20,675
and how, uh, it can make handling and
submitting that form data in Inertia quite
135
00:08:20,675 --> 00:08:25,255
easy. So you just import it from the
InertiaJS React or Vue, whatever you might
136
00:08:25,255 --> 00:08:26,035
be using there.
137
00:08:27,035 --> 00:08:30,975
Simple component, you define the action,
you define the method, and then inside of
138
00:08:30,975 --> 00:08:34,795
that, there's a slot where you can then
put your inputs, your text areas, whatever
139
00:08:34,795 --> 00:08:35,555
you have there.
140
00:08:36,335 --> 00:08:40,135
Um, it also has advanced features to make
writing forms with Inertia a breeze, such
141
00:08:40,135 --> 00:08:44,475
as slot props, form props, events, and
more. The main features, however, include,
142
00:08:44,475 --> 00:08:47,755
uh, what we talked about, which is
Inertia power submission that happens via
143
00:08:47,755 --> 00:08:53,495
XHR in the back, in the background. Um,
those slot props which then expose the
144
00:08:53,495 --> 00:08:58,575
state and helper methods so that it will
handle state and errors and utility
145
00:08:58,575 --> 00:09:01,095
functions for you. So you don't have to
write that yourself. You don't have to
146
00:09:01,095 --> 00:09:04,015
figure that out yourself. It's already
figured out for you and documented for
147
00:09:04,015 --> 00:09:08,555
you. Uh, the form component also provides
props that are available inside of
148
00:09:08,555 --> 00:09:12,635
Inertia's visit options. So those are
available to you. It also provides events
149
00:09:12,635 --> 00:09:17,915
to handle actions like submit and cancel,
success and error. Um, it also... And this
150
00:09:17,915 --> 00:09:20,775
is something that's a little bit tricky
if you had to roll it yourself, but it-
151
00:09:20,775 --> 00:09:26,435
it- it allows for dot notation. So if you
have a username, user address, user age,
152
00:09:26,435 --> 00:09:31,035
whatever, user.name is what you can use
there so that when it gets submits to the
153
00:09:31,035 --> 00:09:34,755
backend, you get it in that... Uh, you can
receive it in that dot notation. And, you
154
00:09:34,755 --> 00:09:38,955
know, it's in an array format there. And
then lastly, you can get programmatic ac-
155
00:09:38,955 --> 00:09:43,175
programatic access to those four methods
via a ref. So in the case that you need to
156
00:09:43,175 --> 00:09:46,995
trigger actions that live outside of the
form, so not just inside the form but you
157
00:09:46,995 --> 00:09:50,615
need to do something from outside the
form, you can, you get programatic access
158
00:09:50,615 --> 00:09:54,935
to the form and to those different pieces
of it using that ref, uh, which is really,
159
00:09:54,935 --> 00:09:59,335
really handy. So it's available for Vue,
React and Svelte and, uh, is available
160
00:09:59,335 --> 00:10:04,635
starting in Inertia version 2.1. So you
can see implementation inside of pull
161
00:10:04,635 --> 00:10:08,155
request 2474. Big shout-out to Pascal
Baljet
162
00:10:08,995 --> 00:10:13,415
and all of those folks involved in
bringing the form component to Inertia.
163
00:10:13,415 --> 00:10:16,655
Thanks so much for Paul for writing that
one up. You can find the official forms
164
00:10:16,655 --> 00:10:21,795
documentation page right now, uh, along
with the useForm form helpers that are
165
00:10:21,795 --> 00:10:24,835
already provided by Inertia. So check that
one out.
166
00:10:27,055 --> 00:10:33,995
Uh, Filament version 4 is now stable. As
of August 12th, 2025, version 4
167
00:10:33,995 --> 00:10:37,535
is officially stable. And in large part,
that is thanks to their incredible
168
00:10:37,535 --> 00:10:41,595
community and all the help with testing,
bug fixing and overall recommendations.
169
00:10:41,595 --> 00:10:45,615
They do not take any of this for granted.
All of the work and time that has been put
170
00:10:45,615 --> 00:10:51,715
in, um, has helped them get where they
are today. So what to expect? We've spoken
171
00:10:51,715 --> 00:10:55,495
about this a few times over the last
couple of months since they released their
172
00:10:55,495 --> 00:11:00,595
open beta. Uh, performance enhancements,
adjustments to, uh, schemas. So if you've
173
00:11:00,595 --> 00:11:04,815
ever wanted to easily combine Filament
form fields, uh, info list entries and so
174
00:11:04,815 --> 00:11:07,955
on and so forth, it was a bit of a pain
previously but now you can configure a
175
00:11:07,955 --> 00:11:12,635
schema and re-use those about the place.
There is support for custom data tables,
176
00:11:12,635 --> 00:11:17,395
actions everywhere, um, and there's more
still to come. So these are just a small
177
00:11:17,395 --> 00:11:20,315
handful of the incredible updates that
have been packed into the version 4
178
00:11:20,315 --> 00:11:23,915
release. They are probably a bit biased in
saying it, but they think this is easily
179
00:11:23,915 --> 00:11:28,515
one of the greatest Filament releases to
date. Um, having not used it myself, I, I
180
00:11:28,515 --> 00:11:32,495
have had a chance to look into it and be
around it a little bit, and I can see that
181
00:11:32,495 --> 00:11:36,435
they have certainly put in a lot of work,
um, and performance has been front of
182
00:11:36,435 --> 00:11:41,175
mind in a lot of what they've done. So
give version 4 a whirl and let us, or let
183
00:11:41,175 --> 00:11:44,335
the Filament team know what you think.
They would love to hear from you in their
184
00:11:44,335 --> 00:11:47,515
Discord server, especially if you're
building something that you are proud of
185
00:11:47,515 --> 00:11:52,555
using Filament. Thanks to Alex6 who I had
the pleasure of meeting for the first time
186
00:11:52,555 --> 00:11:56,015
in, uh, Denver a few weeks ago. So, uh,
shout out to him and the team.
187
00:11:56,931 --> 00:12:00,951
Absolutely. Really good stuff here. Custom
data tables. Come on. I mean, that's
188
00:12:00,951 --> 00:12:02,411
-amazing, right? Super excited about that.
-Yeah.
189
00:12:02,411 --> 00:12:04,991
The schema thing is also really
interesting. I'm interested to dig into
190
00:12:04,991 --> 00:12:09,691
that a bit. Previously, if you wanted to
carry some of these pieces across from,
191
00:12:09,691 --> 00:12:13,071
from, uh, component to component, you had
to define them multiple times and it was
192
00:12:13,071 --> 00:12:14,752
-sort of difficult to, to-
-Mm-hmm
193
00:12:14,752 --> 00:12:17,652
... make sure you had them the same in all
the places. So I think that's sort of the
194
00:12:17,652 --> 00:12:21,212
challenge that it's trying to attack head
on there, which is really, uh,
195
00:12:21,212 --> 00:12:25,191
refreshing. That's, that's a great idea,
and, uh, excited to dig into this one.
196
00:12:25,191 --> 00:12:28,912
Gonna be interesting to see what the
upgrade path looks like from V3 to V4 as
197
00:12:28,912 --> 00:12:34,052
well. Hopefully, not too terrible. Um,
looking to... Yeah. We, we've got a couple
198
00:12:34,052 --> 00:12:35,752
-things we're using Filament in, so yeah.
-Nice.
199
00:12:35,752 --> 00:12:38,672
Hopefully, hopefully, upgrade path is good
and we can use it soon here.
200
00:12:39,392 --> 00:12:41,291
-Yeah.
-Okay. Let's talk about some packages,
201
00:12:41,291 --> 00:12:41,751
shall we?
202
00:12:42,991 --> 00:12:46,951
Sending notifications in Laravel,
something we are all probably familiar
203
00:12:46,951 --> 00:12:53,732
with, but in this case, with Firebase
Cloud, uh, Messaging and Notifier. So
204
00:12:53,732 --> 00:12:58,031
Firebase Cloud Messaging, so this is FCM
for short, it's a cross-platform messaging
205
00:12:58,031 --> 00:13:02,711
solution that enables you to send
messages really reliably. So if you need
206
00:13:02,711 --> 00:13:09,651
to use FCM with Laravel, there is now a,
uh, package, Notifier,
207
00:13:09,651 --> 00:13:14,471
N-O-T-I-F-I-R-E, which is kind of a play
on words for Firebase there, uh, for
208
00:13:14,471 --> 00:13:18,191
sending those FCM notifications with
support for Laravel's notification system.
209
00:13:18,191 --> 00:13:22,231
So again, as I said, notifications, this
is something that's been around, uh, in
210
00:13:22,231 --> 00:13:26,431
Laravel for a long time, but, you know,
there's always new drivers that are coming
211
00:13:26,431 --> 00:13:29,551
out for these things. So if you would
like to be able to integrate Laravel's
212
00:13:29,551 --> 00:13:33,891
notification system with FCM, now you can
do that quite easily. There's support for
213
00:13:33,891 --> 00:13:38,031
both simple and complex FCM messages. It's
a fluent interface, of course, because
214
00:13:38,031 --> 00:13:42,451
why not? That's what Laravel loves. Uh,
it's automatic logging of notification
215
00:13:42,451 --> 00:13:47,231
delivery status, which is actually very
nice. Database migrations for storing FCM
216
00:13:47,231 --> 00:13:52,071
tokens, and then configurable default
settings. Really easy to get set up, all
217
00:13:52,071 --> 00:13:56,171
given as example code inside of the post
here. Thanks to Yannick for writing that
218
00:13:56,171 --> 00:13:56,411
one up.
219
00:13:57,931 --> 00:14:04,191
Incredible. Uh, next up, record and replay
requests with Laravel Chronotrace. The
220
00:14:04,191 --> 00:14:07,911
Chronotrace package enables you to record
and replay Laravel requests
221
00:14:07,911 --> 00:14:12,751
deterministically and generate tests from
production traces. The package can help
222
00:14:12,751 --> 00:14:16,891
you trace external HTTP requests made
during execution, including requests and
223
00:14:16,891 --> 00:14:20,891
response details, status codes, connection
issues, and more. It will also track
224
00:14:20,891 --> 00:14:25,171
database queries, cache events, queue
jobs, and custom events. And once a trace
225
00:14:25,171 --> 00:14:29,271
is captured, you can replay it to show all
the information that is gathered, which
226
00:14:29,271 --> 00:14:32,891
is configurable during the trace. So it'll
give you a trace ID, a timestamp, the
227
00:14:32,891 --> 00:14:36,531
environment that it was run in, the
request URL, the response status, how long
228
00:14:36,531 --> 00:14:40,231
it took, how much memory was used, and it
will list all of the captured events,
229
00:14:40,231 --> 00:14:44,031
database, cache events, HTTP events, and
provide you a summary at the end.
230
00:14:44,811 --> 00:14:48,911
Another interesting feature is generating
a test from a specific trace that you have
231
00:14:48,911 --> 00:14:53,731
recorded. The recording frequency can be
configured as always and sample rate error
232
00:14:53,731 --> 00:14:57,411
only, uh, configuration options
available. And once you have a trace you
233
00:14:57,411 --> 00:15:00,211
want to convert into a test, you can run
the replay command with the
234
00:15:00,211 --> 00:15:02,331
--generate-test flag.
235
00:15:03,111 --> 00:15:06,651
So the main features of this package,
there is smart recording. It'll provide
236
00:15:06,651 --> 00:15:10,651
multiple recording modes, so you can
always record, you can sample, you know,
237
00:15:10,651 --> 00:15:15,811
take a certain percentage, you can record
only errors or on targeted routes. There
238
00:15:15,811 --> 00:15:19,591
is comprehensive event capture, detailed
replay, flexible filtering, multiple
239
00:15:19,591 --> 00:15:24,131
storage options, so you can store into
local disc or S3 or in custom storage
240
00:15:24,131 --> 00:15:29,151
adapters. There is the ability to scrub
personally identifal- in- personally
241
00:15:29,151 --> 00:15:32,791
identifiable information, so you can
automatically mask sensitive information
242
00:15:32,791 --> 00:15:36,931
like passwords, tokens and emails. There
is async storage, which is queue-based, so
243
00:15:36,931 --> 00:15:40,491
that you don't have to worry about
performance impacts, and automatic cleanup
244
00:15:40,491 --> 00:15:43,811
based on retention policies and automatic
purging.
245
00:15:44,491 --> 00:15:48,531
We'll have links to all of this, including
the great place to start being the basic
246
00:15:48,531 --> 00:15:52,451
usage examples for real world ideas on how
to use the package. And it will
247
00:15:52,451 --> 00:15:57,111
illustrate some common workflows, such as
development, bug investigation, and more.
248
00:15:57,111 --> 00:15:59,811
Shout out to the folks behind,
249
00:16:00,671 --> 00:16:01,791
uh, Chronotrace.
250
00:16:03,151 --> 00:16:07,991
It seems really interesting, um, the idea
of having a smart recording where you're
251
00:16:07,991 --> 00:16:10,331
recording, recording only the error,
252
00:16:11,271 --> 00:16:13,651
-uh, responses and routes there. So-
-Mm
253
00:16:13,651 --> 00:16:18,091
... uh, you know, if you were doing that
and, and because it has really flexible,
254
00:16:18,091 --> 00:16:22,731
um, storage, uh, options, right? So you
could throw it into S3 or just put it in
255
00:16:22,731 --> 00:16:23,411
-the local-
-Mm-hmm
256
00:16:23,411 --> 00:16:26,091
... or whatever, you know, all the other
drivers that you have available for
257
00:16:26,091 --> 00:16:29,811
Laravel storage. If you did say, "We're
only gonna capture those that are errors,"
258
00:16:29,811 --> 00:16:33,271
and then you can generate tests from
those, that would be pretty awesome. Say
259
00:16:33,271 --> 00:16:34,171
-like, "Okay."
-Pretty good. Yeah.
260
00:16:34,171 --> 00:16:37,031
"Here's an error that occurred. We want to
make sure that we're handling this
261
00:16:37,031 --> 00:16:41,911
appropriately. We're gonna generate a test
off of that." Um, I think if only used
262
00:16:41,911 --> 00:16:45,011
for that even, it would be really
valuable. So that's pretty cool. Laravel
263
00:16:45,011 --> 00:16:45,651
-Chronotrace.
-For sure.
264
00:16:45,651 --> 00:16:46,031
Nice.
265
00:16:46,651 --> 00:16:49,731
Okay. Let's talk about personas. So,
266
00:16:50,551 --> 00:16:53,671
what would we define a persona as? So,
267
00:16:54,811 --> 00:16:58,071
for me, in our specific context, we have
things like
268
00:16:58,711 --> 00:17:04,591
managers and administrators and users, and
we have, um, when you have a manager, a
269
00:17:04,591 --> 00:17:08,611
manager is typically specifically over a
group of people. So there's, you know,
270
00:17:09,231 --> 00:17:13,091
people that report to them, whatever. So
if you need to be able to
271
00:17:13,871 --> 00:17:17,211
test as those people, it can be kind of a
pain in the neck, right? You, you kinda
272
00:17:17,211 --> 00:17:20,811
have to either have those people as
seeders in your local database, and then
273
00:17:20,811 --> 00:17:23,331
you have to be able to imitate as those
people or-
274
00:17:23,331 --> 00:17:24,591
-Mm-hmm
-... things like that. It, it can just be
275
00:17:24,591 --> 00:17:26,011
challenging. Um,
276
00:17:26,631 --> 00:17:32,191
and so what this package is attempting to
solve is the a- this ability to be able to
277
00:17:32,191 --> 00:17:33,511
define personas
278
00:17:34,151 --> 00:17:38,931
and then be able to switch between them
easily with this multi-persona package.
279
00:17:38,931 --> 00:17:39,191
So,
280
00:17:40,091 --> 00:17:44,511
it's a lightweight context layer system
for Laravel users, which allows a single
281
00:17:44,511 --> 00:17:49,471
user to switch between different roles,
accounts, or tenants dynamically without
282
00:17:49,471 --> 00:17:54,491
having to do imitation or create multiple
logins or sessions. So, um, it does this
283
00:17:54,491 --> 00:17:58,371
by providing a persona model, so it's
stored in the database. So it's attached
284
00:17:58,371 --> 00:18:02,631
to a single user and then provides a
persona service handler operation, like
285
00:18:02,631 --> 00:18:06,231
getting the current persona, switching
between them, checking their permissions,
286
00:18:06,231 --> 00:18:10,363
et cetera.So they, they reference this as
saying it could be helpful for
287
00:18:10,363 --> 00:18:13,943
multi-tenant SaaS applications. So a user
could switch between different company
288
00:18:13,943 --> 00:18:19,063
contexts, those role-based, uh, based
access controls. Um, and then it gives a
289
00:18:19,063 --> 00:18:23,024
couple snippets as an example from the
README, uh, which will illustrate creating
290
00:18:23,024 --> 00:18:27,663
personas for multiple company contexts.
So, um, you know, multi-tenant SaaS,
291
00:18:27,663 --> 00:18:31,623
role-based access, agency management,
marketplace platforms, switching between,
292
00:18:31,623 --> 00:18:35,483
like, buyer and seller context switching.
Uh, or as well as enterprise systems,
293
00:18:35,483 --> 00:18:39,344
which would be what I'm talking about, a
department or project-based access, right?
294
00:18:39,344 --> 00:18:43,363
Um, and so this is actually something
that's very relevant to us recently
295
00:18:43,363 --> 00:18:48,103
because what we've done recently is pulled
all of the role items out into a
296
00:18:48,103 --> 00:18:52,143
different service, and we only have left
in our applications permissions alone.
297
00:18:52,143 --> 00:18:55,803
That's all we're checking. And so for us,
it's not that roles don't exist, they just
298
00:18:55,803 --> 00:18:59,143
don't necessarily exist in our system.
But when we're testing as developers or
299
00:18:59,143 --> 00:19:03,884
developing something for a particular
persona, we have to have some way to
300
00:19:03,884 --> 00:19:07,343
imitate that. And it's nice to be able to
switch between those as well to say like,
301
00:19:07,343 --> 00:19:10,863
"If I'm a manager, should I s- can I see
this? If I'm a user, can I see this?" And,
302
00:19:10,863 --> 00:19:13,023
you know, you don't wanna have to
imitate, imitate. You can just kinda
303
00:19:13,023 --> 00:19:16,103
switch between these personas really
easily. So this looks like a really great
304
00:19:16,103 --> 00:19:19,823
package. Uh, Paul Rodman, thanks for writ-
writing that one up. And I believe it's
305
00:19:19,823 --> 00:19:23,723
actually also the same folks that created
the last one we just talked about,
306
00:19:23,723 --> 00:19:29,683
ChronoTrace. And so, um, I'm not exactly
sure. Grazulex is the name of the org in
307
00:19:29,683 --> 00:19:33,003
GitHub that created both of those. Uh,
cool stuff. So thanks, Paul-
308
00:19:33,003 --> 00:19:33,583
-Yes
-... for writing that up.
309
00:19:34,263 --> 00:19:34,663
Amazing.
310
00:19:36,023 --> 00:19:42,203
Next up, if you are using Postman for
either manually testing your API endpoints
311
00:19:42,203 --> 00:19:47,823
or providing Postman collections for
people that are using your API or, um, you
312
00:19:47,823 --> 00:19:53,363
know, investigating using your API, uh,
API, the Laravel Postman package helps you
313
00:19:53,363 --> 00:19:56,563
to generate... Or not doesn't help you.
It does. It will do it for you. It will
314
00:19:56,563 --> 00:20:00,003
generate Postman collections from your
Laravel routes with intelligent
315
00:20:00,003 --> 00:20:03,823
organization and rich documentation
capabilities. The package offers
316
00:20:03,823 --> 00:20:07,143
comprehensive configuration options for
generating the Postman collection with
317
00:20:07,143 --> 00:20:10,843
conventions that get you started quickly.
To use the package, you create the Postman
318
00:20:10,843 --> 00:20:14,743
collection with an artisan command,
postman:generate, and the package includes
319
00:20:14,743 --> 00:20:18,683
configuration options for features such
as route filtering, API authentication
320
00:20:18,683 --> 00:20:22,363
settings, file generation paths and
filenames, and more.
321
00:20:23,043 --> 00:20:28,283
After generating an example Laravel
project, uh, with install api, so the, uh,
322
00:20:28,283 --> 00:20:31,783
PHP artisan install api command and
configuring a few things such as an API
323
00:20:31,783 --> 00:20:37,083
token, Paul, the author of this article,
was able to get things working in Postman
324
00:20:37,083 --> 00:20:42,303
within minutes by importing using
Postman's import functionality. Main
325
00:20:42,303 --> 00:20:45,183
features of the package include generating
Postman collections with a single
326
00:20:45,183 --> 00:20:49,723
command, automatic request body generation
from form request validation rules,
327
00:20:49,723 --> 00:20:54,023
multiple organization strategies either by
route prefix, controller, or using nested
328
00:20:54,023 --> 00:20:58,283
paths. There is built-in authentication
support including bearer, basic auth, and
329
00:20:58,283 --> 00:21:02,423
API keys, customizable route filtering,
and environment variable support for
330
00:21:02,423 --> 00:21:07,743
sensitive data. So if you are using or
plan to use and support Postman for
331
00:21:07,743 --> 00:21:11,743
interacting with your API, check out the
package. We have links to that for you in
332
00:21:11,743 --> 00:21:12,463
the show notes.
333
00:21:13,083 --> 00:21:14,623
Very nice. That's good stuff there.
334
00:21:15,323 --> 00:21:19,703
Um, I would also be remiss if I did not
mention Scramble. So if you're looking to
335
00:21:19,703 --> 00:21:23,963
generate documentation, API documentation,
Scramble and Scramble Pro are really,
336
00:21:23,963 --> 00:21:28,243
really good. And then what those give you
in output, you could actually also
337
00:21:28,243 --> 00:21:31,063
generate Postman collections from that as
well. I know there's a ton of tool chains
338
00:21:31,063 --> 00:21:34,523
around this stuff. That's one that's
worked really well for us. Um, and so
339
00:21:34,523 --> 00:21:37,943
just, you know, a little shout-out there
to the folks at Scramble. Really, really
340
00:21:37,943 --> 00:21:44,663
good tool there. Okay. Speaking of AI,
building MCP servers in PHP. So MCP
341
00:21:44,663 --> 00:21:46,763
standing for model context protocol.
342
00:21:47,683 --> 00:21:50,563
Let's talk about what this is for a second
here. We've talked about MCPs a little
343
00:21:50,563 --> 00:21:50,783
bit.
344
00:21:51,383 --> 00:21:55,323
Um, what MCPs are here, and I'm gonna, I'm
gonna stumble over this and I'm gonna do
345
00:21:55,323 --> 00:21:56,003
my very best.
346
00:21:56,663 --> 00:22:03,623
It's a standardized open protocol that
allows LLM clients to understand what
347
00:22:03,623 --> 00:22:10,403
tools and structured capabilities your
application provides. So you get
348
00:22:10,403 --> 00:22:14,863
this documentation essentially that you
can hand to the LLM and you can say, "Hey,
349
00:22:14,863 --> 00:22:19,343
LLM, you now have this new tool, and you
might want to use this new tool. Here's a
350
00:22:19,343 --> 00:22:24,103
description of when you might want to use
this." And so it can look at its, um, you
351
00:22:24,103 --> 00:22:28,843
know, its prompt and then say, "What is
the thing I'm trying to accomplish? Do I
352
00:22:28,843 --> 00:22:32,323
have any tools available to me that look
like they might help me accomplish this
353
00:22:32,323 --> 00:22:38,203
task?" And if your MCP looks like it can
handle one of those things, it will grab
354
00:22:38,203 --> 00:22:43,023
that and then it can feed into that, the
different context pieces that you've said
355
00:22:43,023 --> 00:22:45,943
are needed. So the different arguments
that are needed, and then you can say,
356
00:22:45,943 --> 00:22:49,383
"Here's the structured output I'm gonna
provide." You can imagine that building
357
00:22:49,383 --> 00:22:53,143
all that from scratch and learning that
could be rather challenging. And it could,
358
00:22:53,143 --> 00:22:57,643
but really, all it's doing, uh, at a
high, high level is saying, "Here are
359
00:22:57,643 --> 00:23:01,763
methods and maybe, like, API endpoints
that I have available, and I need to
360
00:23:01,763 --> 00:23:08,603
describe them for the LLM." So how do we
do that? Right? That's what this does for
361
00:23:08,603 --> 00:23:12,543
you, is the goal. So it's built with PHP
8.1+.
362
00:23:13,463 --> 00:23:17,223
So there's PSR standards, modular design
principles. It follows established PHP
363
00:23:17,223 --> 00:23:21,983
conventions. Um, it also has multiple
transport options. So you could imagine if
364
00:23:21,983 --> 00:23:26,083
I have a long-running job that's... If,
if I have a long-running tool that's gonna
365
00:23:26,083 --> 00:23:29,763
be out there, I have to make sure that
there's things like, uh, in- streamable
366
00:23:29,763 --> 00:23:33,643
HTTP with resumability, right? There's
also server-sent events. So this allows
367
00:23:33,643 --> 00:23:38,483
for multiple different transport options.
Uh, you can also use PHP attributes, which
368
00:23:38,483 --> 00:23:42,283
are wonderful. Like, using an attribute
allows you co-locate additional
369
00:23:42,283 --> 00:23:47,523
information right next to your methods.
And so really nice to be able to look at a
370
00:23:47,523 --> 00:23:52,703
method and say this attribute, MCPTool or
MCPResource or MCPPrompt, those
371
00:23:52,703 --> 00:23:56,703
attributes can be used for zero
configuration element registration. So you
372
00:23:56,703 --> 00:24:00,123
annotate your methods and then the
library sort of handles the rest for you.
373
00:24:00,123 --> 00:24:05,143
It will do intelligent schema definitions.
So JSON schema generation from your
374
00:24:05,143 --> 00:24:08,643
method signatures, your docblocks, and
then those attributes that we were just
375
00:24:08,643 --> 00:24:13,756
talking about. Um, it also allows for...So
session management, so this is another
376
00:24:13,756 --> 00:24:19,255
thing. How does your LLM then get a
session for your tool? So it allows for
377
00:24:19,255 --> 00:24:22,896
multiple storage backends in memory,
cache-based custom implan-
378
00:24:22,896 --> 00:24:27,835
implementations, persistent sessions that
live across different reconnections. Um,
379
00:24:27,835 --> 00:24:31,516
dependency injection, which we would
expect with Laravel, of course. And then
380
00:24:31,516 --> 00:24:35,175
production ready features like error
handling or batch request process-
381
00:24:35,175 --> 00:24:38,475
processing, event sourcing, resumable
connections, extensive logging
382
00:24:38,475 --> 00:24:44,316
capabilities, all those things. So there's
a hands-on example in the, um, post here,
383
00:24:45,196 --> 00:24:49,155
which is great. I'm not gonna go through
all of that, but it's, it's sort of...
384
00:24:49,155 --> 00:24:49,856
This is a
385
00:24:50,595 --> 00:24:55,915
package/mini tutorial, I would say. So if
you're looking to expose a service that
386
00:24:55,915 --> 00:25:00,115
you've created to an LLM using some sort
of MCP server, I would definitely give
387
00:25:00,115 --> 00:25:04,655
this one a look. It's a bit of a primer,
uh, that it explains a little bit how it
388
00:25:04,655 --> 00:25:09,016
works altogether, and then also does the
work of generating those things for you
389
00:25:09,016 --> 00:25:14,715
without having to, um, do it by hand. And
also you can generate it when you update
390
00:25:14,715 --> 00:25:17,435
your stuff too, right? So if you make a
new change, you just generate the
391
00:25:17,435 --> 00:25:21,615
documentation again and away you go. So
really cool tool there. Um,
392
00:25:22,435 --> 00:25:24,695
good write-up on that one. Thank you,
Yannick.
393
00:25:27,175 --> 00:25:32,675
The Laravel ShareLink package helps you
create, manage and secure temporary share
394
00:25:32,675 --> 00:25:37,035
links for files, routes and models. The
package enables simple sharing with custom
395
00:25:37,035 --> 00:25:41,435
expiration and maximum clicks and
provides an API for managing shares, such
396
00:25:41,435 --> 00:25:45,355
as extending the time for an existing
share. There is a basic example from the
397
00:25:45,355 --> 00:25:49,615
package's documentation. You can use a
fluent interface to do this. Sharelink
398
00:25:49,615 --> 00:25:54,075
colon, colon, create, give it a path to
some file or some location, give it an
399
00:25:54,075 --> 00:25:57,815
expiration, specify number of maximum
clicks, specify if you wanna use a
400
00:25:57,815 --> 00:26:02,555
password and then generate. And that will
return to you a string, which is a link
401
00:26:02,555 --> 00:26:06,835
to, you know, yourapp.com/sla- /share/
402
00:26:08,315 --> 00:26:09,195
a random string.
403
00:26:09,795 --> 00:26:13,435
The package has lots of advanced features
such as sharing a route, an eloquent model
404
00:26:13,435 --> 00:26:17,795
or even specifying IP restrictions for
share links. The package also provides a
405
00:26:17,795 --> 00:26:20,575
command line interface to generate links
if you want to create them from the
406
00:26:20,575 --> 00:26:22,535
command line instead of via code.
407
00:26:23,155 --> 00:26:26,435
Main features of the package include
multiple resource types, so you can share
408
00:26:26,435 --> 00:26:30,535
files, routes and model previews
seamlessly. There is time limited access.
409
00:26:30,535 --> 00:26:34,435
There is password protection, rate
limiting, IP filtering, signed URLs using
410
00:26:34,435 --> 00:26:39,075
Laravel's signed route integration. There
is a burn after reading functionality, so
411
00:26:39,075 --> 00:26:42,855
you have one-time access links that will
self-destruct. Comprehensive auditing to
412
00:26:42,855 --> 00:26:46,955
track access patterns, IPs and timestamps,
advanced security for password throttling
413
00:26:46,955 --> 00:26:51,095
and brute force protection. Flexible
delivery, uh, so there's support for
414
00:26:51,095 --> 00:26:55,995
X-Nfile and X-XL redirect headers and
streaming. There is a management API,
415
00:26:55,995 --> 00:27:00,375
command line commands, observability with
built-in logging and metrics integration,
416
00:27:00,375 --> 00:27:06,235
and it is test friendly providing you with
a comprehensive test coverage easy
417
00:27:06,235 --> 00:27:11,835
mocking. Uh, it's always good. It's, it's
easy, it's easy to do,
418
00:27:12,855 --> 00:27:13,195
um,
419
00:27:13,915 --> 00:27:14,415
temporary
420
00:27:15,115 --> 00:27:17,415
links and URLs and things like that in
Laravel.
421
00:27:18,095 --> 00:27:18,635
Um, but
422
00:27:19,335 --> 00:27:22,715
the extra functionality that you might add
on top of it that this package offers
423
00:27:22,715 --> 00:27:26,095
you, uh, to give you a bit more control is
something that now you don't have to
424
00:27:26,095 --> 00:27:27,155
worry about implementing yourself.
425
00:27:28,475 --> 00:27:30,515
Very cool. And I've, I've had to do this
before, too.
426
00:27:31,815 --> 00:27:33,975
Which is, it's not that... It's, you know,
427
00:27:34,675 --> 00:27:38,695
not that challenging until you try to do,
uh, a couple of the more advanced things.
428
00:27:38,695 --> 00:27:41,715
And then, yes, it, it does become, um,
429
00:27:43,055 --> 00:27:45,235
-more difficult, so cool package there.
-Yes.
430
00:27:45,235 --> 00:27:46,535
Uh, got to read through on that one.
431
00:27:47,655 --> 00:27:53,275
Laravel Dev Toolbox, so this is advertised
as your Swiss Army Knife Artisan CLI.
432
00:27:53,275 --> 00:27:57,115
Well, that could mean a lot of different
things, right? Are we generating code
433
00:27:57,115 --> 00:28:01,995
here? Are we... Like, what- what exactly
is the Swiss Army Knife here? So let me do
434
00:28:01,995 --> 00:28:06,015
my very best to describe this. This was
created by Jean-Marc Stravin
435
00:28:06,755 --> 00:28:11,755
and it helps teams. Here's, here's what it
does. It helps teams maintain code
436
00:28:11,755 --> 00:28:14,955
quality and also gain deeper
understandings of their Laravel
437
00:28:14,955 --> 00:28:18,375
applications through how? Automated
analysis, that's one.
438
00:28:19,235 --> 00:28:20,735
Code review assistance, two.
439
00:28:21,415 --> 00:28:26,535
Performance bottleneck detection and then
technical debt identification. Um, so
440
00:28:26,535 --> 00:28:30,195
they- they're saying it's, it's really
kind of helpful for new developers, but
441
00:28:30,195 --> 00:28:34,615
also establishing, uh, continuous
integration, continuous delivery, quality
442
00:28:34,615 --> 00:28:38,755
gates, uh, and also monitoring application
structure and health. Let's talk about
443
00:28:38,755 --> 00:28:40,635
some of the main features real quick. So
444
00:28:41,955 --> 00:28:48,695
it can perform analysis of models, routes,
services and more. It can analyze
445
00:28:48,695 --> 00:28:52,975
eloquent models, relationships and usage
pattern, route analysis. Let's, let's do
446
00:28:52,975 --> 00:28:56,315
some real examples. Those are the main
features, but let's talk about what it
447
00:28:56,315 --> 00:28:57,855
actually does. So
448
00:28:58,595 --> 00:29:01,815
here's a few that you could try in
production that you might find useful.
449
00:29:02,795 --> 00:29:04,055
So you could say PHP artisan
450
00:29:04,675 --> 00:29:09,475
dev model where-used and then specify a
model name. So what this is gonna do is
451
00:29:09,475 --> 00:29:13,675
this is going to surface for you all the
different places inside your code where
452
00:29:13,675 --> 00:29:17,695
that model is used. So you might think to
yourself, "Well, couldn't I just command
453
00:29:17,695 --> 00:29:21,875
click?" Yes, you could. You absolutely
could do that. However, it's going to give
454
00:29:21,875 --> 00:29:25,455
you a CLI output of that. Here's
something that might be a little bit more
455
00:29:25,455 --> 00:29:29,655
helpful though. Tracing a SQL query for a
particular route. So if you see a php
456
00:29:29,655 --> 00:29:34,235
artisan dev sqltrace route games.index, it
will show you here all
457
00:29:34,855 --> 00:29:35,575
of the
458
00:29:36,475 --> 00:29:40,615
different SQL queries that were run when
you hit that route. Now that I can see
459
00:29:40,615 --> 00:29:45,595
being pretty interesting, right? It's like
I, I, I'm interested in knowing what are
460
00:29:45,595 --> 00:29:48,535
the SQL queries that are running for this
particular thing. You don't have to dig
461
00:29:48,535 --> 00:29:51,095
all the way through. You don't have to go
through your service classes. It's just
462
00:29:51,095 --> 00:29:53,875
like, "Here they are. I'll surface them
all for you." Pretty interesting.
463
00:29:54,555 --> 00:29:58,995
Um, it can also analyze SQL queries, that
same thing where you say like, "Here's the
464
00:29:58,995 --> 00:30:02,775
route." It can analyze SQL queries for
n+1 problems, duplicates or performance
465
00:30:02,775 --> 00:30:06,315
issues. So you can point it at a route and
say, "This route seems to be slow. What's
466
00:30:06,315 --> 00:30:09,635
the problem here?" And then it can go
through and say, "Oh, well there's 16
467
00:30:09,635 --> 00:30:13,975
duplicates here. You know, you're querying
this thing 16 times, it's an n+1 query
468
00:30:13,975 --> 00:30:17,335
here. And also you need an index on this."
That's, it seems like it's, it's slow,
469
00:30:17,335 --> 00:30:19,015
right? Here's the query breakdown for you.
470
00:30:19,735 --> 00:30:23,287
Um...You can do service provider
performance analysis. So you could say,
471
00:30:23,287 --> 00:30:26,567
"Go through all the service providers,
roll through all of them, and if any of
472
00:30:26,567 --> 00:30:29,828
them take more than 100 milliseconds to
load, tell me which ones those are." All
473
00:30:29,828 --> 00:30:32,367
right? And it gives you this nice,
beautiful CLI output. Here's the number of
474
00:30:32,367 --> 00:30:35,227
providers that you have, here's how many
are deferred, here's how many you have
475
00:30:35,227 --> 00:30:38,948
that are slow, here's the ones that they
are, et cetera. There's a bunch more
476
00:30:38,948 --> 00:30:42,508
commands you can try, as well as various
export formats, so it's not always just
477
00:30:42,508 --> 00:30:46,707
going to the CLI. You can do JSON export
as well. Um, so this seems like something,
478
00:30:46,707 --> 00:30:48,347
too, you could, like, pipe to other
479
00:30:49,268 --> 00:30:51,547
outputs as well. So you could run
through... You could say, "Give me all my
480
00:30:51,547 --> 00:30:56,407
routes, and then I want to do a slow query
analysis on all those, all those routes
481
00:30:56,407 --> 00:30:58,667
that I have and, and run through them."
Um, so
482
00:30:59,688 --> 00:31:03,428
some, some interesting tools there. Um,
yeah. Uh, worth checking out, for sure. If
483
00:31:03,428 --> 00:31:05,287
that sounds interesting to you, Yannick,
thanks for writing that one up.
484
00:31:07,067 --> 00:31:11,868
Into the tutorials. The first one we're
gonna talk about here today with... Really
485
00:31:11,868 --> 00:31:14,727
the only one we'll talk about, 'cause
we've got the homework section coming up.
486
00:31:14,727 --> 00:31:15,587
-This one is-
-Oh, that's right
487
00:31:15,587 --> 00:31:20,287
... written by Moses Anumadu, and it talks
you through building a multi-step form
488
00:31:20,287 --> 00:31:25,087
with Laravel, Livewire, and MongoDB. Talks
you through the project set up, getting
489
00:31:25,087 --> 00:31:30,347
Livewire set up and installed, building
the Livewire component itself, and then
490
00:31:30,347 --> 00:31:35,747
handling form data with Mongo, handling
the form in Livewire itself, and then
491
00:31:35,747 --> 00:31:39,887
testing that as well. So, I think this is
the first time I've seen Moses put up a, a
492
00:31:39,887 --> 00:31:44,167
tutorial on Laravel News, so shout out if
that is indeed your first time to Moses.
493
00:31:44,807 --> 00:31:50,607
We also have from Harris Raftopoulos nine
of our framework reminders. We will link
494
00:31:50,607 --> 00:31:54,027
to all of them for you in the show notes.
But we're talking about simplified batch
495
00:31:54,027 --> 00:31:57,687
job creation with Laravel's enhanced
Artisan command. We've got fluent object
496
00:31:57,687 --> 00:32:02,207
operations with Laravel's enhanced helper
utilities, advanced application
497
00:32:02,207 --> 00:32:05,507
architecture through Laravel's service
container management, establishing
498
00:32:05,507 --> 00:32:09,787
consistent data foundations with Laravel's
database population system. We're talking
499
00:32:09,787 --> 00:32:13,507
about migrating and seeding here.
Laravel's use-policy attribute giving you
500
00:32:13,507 --> 00:32:17,447
explicit authorization control, Laravel
global scopes and automatic query
501
00:32:17,447 --> 00:32:22,247
filtering, controlling execution flow with
Laravel's sleep helper, maintaining data
502
00:32:22,247 --> 00:32:25,987
consistency with Laravel database
transactions, and efficient context
503
00:32:25,987 --> 00:32:28,787
management with Laravel's remember
functions.
504
00:32:29,447 --> 00:32:33,387
If any of that has tickled your fancy,
we'll have links to them for you in the
505
00:32:33,387 --> 00:32:38,227
show notes, as I said. And Harris has also
just tweeted, um, that he will have a
506
00:32:38,227 --> 00:32:42,867
new, I think, video series coming right
here to Laravel News next week at the time
507
00:32:42,867 --> 00:32:48,527
of this recording on Advanced Eloquent
Mastery. So if you're wanting to look into
508
00:32:48,527 --> 00:32:52,427
that, it's gonna help you transform messy
controllers into clean and expressive
509
00:32:52,427 --> 00:32:57,527
code. And from his perspective, this is
honestly going to help many Laravel devs.
510
00:32:57,527 --> 00:33:00,567
He's gonna be sharing techniques that will
level up your Laravel and development
511
00:33:00,567 --> 00:33:04,007
skills and make your code more
maintainable, and you can expect
512
00:33:04,007 --> 00:33:07,747
practical, hands-on video tutorials with
real code examples that you can use
513
00:33:07,747 --> 00:33:12,487
immediately. We'll have all of that for
you on Laravel News in the coming weeks.
514
00:33:12,487 --> 00:33:15,067
Be sure to keep an eye out.
515
00:33:16,487 --> 00:33:20,847
Speaking of keeping things clean, uh,
there's actually a
516
00:33:21,587 --> 00:33:25,947
worldwide meetup, Laravel Worldwide
Meetup, on the 26th. So it'll be before
517
00:33:25,947 --> 00:33:31,527
the next time we have this show. Um, and
the title of the talk is Keeping Laravel
518
00:33:31,527 --> 00:33:34,647
Elegant When Business Gets Messy. Oh, my
word.
519
00:33:35,767 --> 00:33:40,527
What a relevant topic, right? That sounds
awesome. And, uh, it seems similar to,
520
00:33:40,527 --> 00:33:43,767
like, what Harris was talking about,
right? Like, keeping controllers clean,
521
00:33:43,767 --> 00:33:50,487
expressive, whatever. So, Andy Hinkle. I
have no, I have no, uh, you know, no
522
00:33:50,487 --> 00:33:54,307
affiliation... Oh, wait. You know. Lead
software developer on my team. Oh, Andy.
523
00:33:54,307 --> 00:33:55,687
-That Andy. Yeah.
-Yeah, yeah.
524
00:33:55,687 --> 00:33:59,207
So he's gonna be presenting on August
26th. Definitely don't sleep on that one.
525
00:33:59,207 --> 00:34:02,647
It's gonna be, it's gonna be a good talk.
I'm really, really excited for that one.
526
00:34:02,647 --> 00:34:07,087
Uh, so make sure you get a chance to watch
that. Should be great. Well, folks, that
527
00:34:07,087 --> 00:34:07,547
-wrap-
-If you-
528
00:34:07,547 --> 00:34:08,587
-Yeah. Go ahead, Michael
-... before you go, also-
529
00:34:08,587 --> 00:34:11,907
-Yeah.
-If you, like Andy, want to present
530
00:34:11,907 --> 00:34:17,587
somewhere and you've missed out at Laracon
US or Laracon AU, the Laravel Worldwide
531
00:34:17,587 --> 00:34:19,647
-Meetup is a fantastic way-
-Absolutely
532
00:34:19,647 --> 00:34:24,727
... to get your speaking repertoire up.
Margaret and Dan from the team at Vehicle
533
00:34:24,727 --> 00:34:29,467
are fantastic hosts and, uh, custodians of
the Worldwide Meetup at the moment. You
534
00:34:29,467 --> 00:34:33,127
can reach out to them. You can propose a
talk at meetup.laravel.com. And I think
535
00:34:33,127 --> 00:34:38,867
Laracon EU just opened up their call for
papers for 2026. The conference is on
536
00:34:38,867 --> 00:34:44,527
March the 2nd and 3rd, I believe,
probably, in Amsterdam once again. So,
537
00:34:44,527 --> 00:34:49,787
definitely get your thinking caps on and
prepare some talk submissions for there as
538
00:34:49,787 --> 00:34:51,747
well. It's all happening at the moment.
539
00:34:52,727 --> 00:34:53,087
Love it.
540
00:34:54,267 --> 00:34:58,087
Folks, episode 242 is a wrap. Thanks so
much for hanging out with us. Lar-
541
00:34:58,087 --> 00:35:02,407
podcast.laravel-news.com/242 for show
notes is the place to find them. If you
542
00:35:02,407 --> 00:35:05,347
liked the show, please rate it up. Five
stars would be incredible, helps people
543
00:35:05,347 --> 00:35:08,767
find the show. And of course, if you have
any questions, we'd love to hear from you
544
00:35:08,767 --> 00:35:13,307
on X, on Bluesky, on Twitter, whatever you
wanna call it. Uh, Michael de Wendel,
545
00:35:13,307 --> 00:35:18,167
Jacob Bennett, or Laravel News, folks.
Till next time, it was so wonderful seeing
546
00:35:18,167 --> 00:35:23,047
so many of you at Laracon. And, uh,
thanks so much for saying hi and saying
547
00:35:23,047 --> 00:35:27,507
you listen. A lot of times it literally
feels like we're talking into the void,
548
00:35:27,507 --> 00:35:27,927
-Michael.
-Mm-hmm. Mm-hmm.
549
00:35:27,927 --> 00:35:29,867
I, I know I speak for both of us when I
say this.
550
00:35:29,867 --> 00:35:32,007
-Yeah.
-It's like you do this every couple weeks.
551
00:35:32,007 --> 00:35:35,407
You're like, "Is anybody listening to
this?" And so it was very encouraging to
552
00:35:35,407 --> 00:35:39,487
hear from so many of you. It was wonderful
meeting you, and we will see you
553
00:35:40,107 --> 00:35:40,587
next time.
554
00:35:41,647 --> 00:35:42,267
Thanks, my friends.
555
00:35:52,827 --> 00:35:58,087
Bye.