Navigated to Boost, Inertia Forms, and multiple personas - Transcript

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.

Never lose your place, on any device

Create a free account to sync, back up, and get personal recommendations.