Navigated to Local errors, pretty PHP, and terminal UIs - Transcript

Local errors, pretty PHP, and terminal UIs

Episode Transcript

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

Never lose your place, on any device

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