Navigated to Faster NativePHP, PHP pipes, and AI chat kits - Transcript

Faster NativePHP, PHP pipes, and AI chat kits

Episode Transcript

1 00:00:03,959 --> 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,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:31,019 --> 00:00:31,840 There it is. 5 00:00:32,880 --> 00:00:37,700 For those of you who happen to be watching online, Mr. Dyrynda is currently holding 6 00:00:37,700 --> 00:00:37,899 up 7 00:00:38,540 --> 00:00:42,459 a little elephant that is... He's got a name. Is it Bruno? 8 00:00:43,119 --> 00:00:43,580 Bruce. 9 00:00:44,180 --> 00:00:48,979 Bruce. Bruce the Elephant. If you've never been to Laravel Australia before, 10 00:00:49,619 --> 00:00:55,039 you may not know who Bruce is. Bruce is the official mascot of Laravel Australia, 11 00:00:55,039 --> 00:00:58,419 and Michael has recently commissioned an LED sign 12 00:00:59,319 --> 00:01:05,179 of said Bruce, as well as the upcoming theme of Laracon AU this year. So, pretty 13 00:01:05,179 --> 00:01:08,960 freaking awesome. If you're not watching on- online, you should- you should check 14 00:01:08,960 --> 00:01:11,399 it out, 'cause it looks really, really darn cool. Michael, tell us a little bit 15 00:01:11,399 --> 00:01:12,039 about this thing. 16 00:01:13,119 --> 00:01:15,899 Yeah, I had- I had this... When we- when we started putting the branding together 17 00:01:15,899 --> 00:01:21,059 for this year, it was... We- we landed on this notion of Level Up, and it- and it 18 00:01:21,059 --> 00:01:25,999 came together in a really, I think, clever way, which maybe is a- is a discussion 19 00:01:25,999 --> 00:01:28,240 -for another podcast, but... -Okay, sure. 20 00:01:28,880 --> 00:01:34,720 When I saw the final version of this Level Up logo, or this, uh... 21 00:01:35,359 --> 00:01:37,400 -What do they call it? This l- lock up. -Mm-hmm. 22 00:01:37,400 --> 00:01:39,939 'Cause we've got a couple of different- we've got a couple of different lock ups 23 00:01:39,939 --> 00:01:43,439 for the Level Up logo, but this particular one, which is a- which is a square where 24 00:01:43,439 --> 00:01:45,260 Bruce actually jumps up the ladder 25 00:01:45,919 --> 00:01:47,359 of the- of the level. 26 00:01:48,019 --> 00:01:52,119 I thought that's- that'd look really cool as a sign, and so I- I found a place on 27 00:01:52,119 --> 00:01:52,560 Etsy 28 00:01:53,179 --> 00:01:57,759 that manufactures these LED signs, and I just got it in- I just got the delivery 29 00:01:57,759 --> 00:02:03,279 yesterday, so. I haven't quite figured out how to... There's- if- if you're watching 30 00:02:03,279 --> 00:02:06,319 the video, you can see there's, like, a piece of paper on my wall here that- 31 00:02:06,319 --> 00:02:08,119 -Mm-hmm. -Which is the template for where I need to 32 00:02:08,899 --> 00:02:13,959 put it on the wall, but I have no idea as yet how I'm going to mount it, how I'm 33 00:02:13,959 --> 00:02:17,459 going to wire it up. Because each- each of the 15 pieces of the- 34 00:02:18,079 --> 00:02:22,199 of the logo are individually wired with LEDs. I've got to figure out how to kind 35 00:02:22,199 --> 00:02:26,539 of connect it all up, uh, and- and get it on the wall without, 36 00:02:27,239 --> 00:02:31,559 um, damaging the sign, the wall, or burning my house down. So, wish me luck. 37 00:02:31,559 --> 00:02:36,499 If you've- if you've had any experience in- in wiring these things up, uh, reach 38 00:02:36,499 --> 00:02:38,039 out to me. If you can help, that'd be great. 39 00:02:38,859 --> 00:02:40,399 Absolutely. It's gonna look awesome though. I'm confident. 40 00:02:40,399 --> 00:02:43,119 It definitely seems like a good... All right. It's gonna look great. Like, just- 41 00:02:43,119 --> 00:02:48,139 just seeing it, just the- the one piece there. Um, maybe I'll share it on- on 42 00:02:48,139 --> 00:02:50,499 -Twitter. But... -Absolutely. I said if there's anybody I 43 00:02:50,499 --> 00:02:52,519 know who could do it, it would be Michael Dorinda. 44 00:02:52,519 --> 00:02:54,619 -We'll figure it out. -Michael can figure it out. 45 00:02:54,619 --> 00:02:56,939 It definitely feels like a weekend project, though. 46 00:02:56,939 --> 00:03:00,039 Yes. Yeah, yeah. It's gonna take a little bit of time. Little bit of time. Well, 47 00:03:00,039 --> 00:03:04,779 episode 241 is what we're on, folks. Thanks for joining us. July 14th, 2025 is 48 00:03:04,779 --> 00:03:08,839 the date. We've got some releases, some news, some packages. All sorts of good 49 00:03:08,839 --> 00:03:14,819 tutorials, and they're coming your way right now. Here we go. Episode 241, 50 00:03:14,819 --> 00:03:21,279 Releases, Laravel version 12.20. So, Laravel team released this, with the 51 00:03:21,279 --> 00:03:23,439 ability to fail while throttling ... 52 00:03:25,399 --> 00:03:29,539 For a context remember method, the ability to customize the collection pluck with 53 00:03:29,539 --> 00:03:33,579 the callback, and more. So let's start with that remember context. Ben Askew 54 00:03:33,579 --> 00:03:37,799 contributed context remember, and remember hidden functions, which will add the 55 00:03:37,799 --> 00:03:42,999 result of the provided closure to the context, if not already present, and 56 00:03:42,999 --> 00:03:47,139 always return the result. So before, what you'd have to do is you'd have to check to 57 00:03:47,139 --> 00:03:50,439 see if context... And context, again, is something we've talked about on this show 58 00:03:50,439 --> 00:03:55,719 for quite some time. Uh, but context is a Laravel class that you can now use, that 59 00:03:55,719 --> 00:04:01,539 will maintain the context of the, uh, request. So you can say, "Add this to the 60 00:04:01,539 --> 00:04:05,779 context," it will persist for the lifecycle of that request. And so, what 61 00:04:05,779 --> 00:04:10,419 you used to have to do is context has, and you check to see if a key existed, and 62 00:04:10,419 --> 00:04:14,139 then if it didn't, then you would have... Sorry, actually, let's- let's take the... 63 00:04:14,139 --> 00:04:17,959 Let's- let's dig in a bit here. If it did have that, then you'd have to retrieve it. 64 00:04:17,959 --> 00:04:22,919 Otherwise, you'd have to go set it and then return it, right? And so, that's- 65 00:04:22,919 --> 00:04:26,779 that's kind of what it was. It was- it was not friendly. And so with this, you can 66 00:04:26,779 --> 00:04:31,359 now say, "Context remember," you can pass in the key, then you can pass in a 67 00:04:31,359 --> 00:04:37,399 closure, which will either return the value of that key, or will set it using 68 00:04:37,399 --> 00:04:41,579 the result of that closure. So it's really much nicer. Thanks, Ben, for writing that 69 00:04:41,579 --> 00:04:41,959 one up. 70 00:04:43,099 --> 00:04:48,319 Balboa codes contribute doesn'tStartWith and doesn'tEndWith string methods to the 71 00:04:48,319 --> 00:04:52,959 stringable classes, which are the opposite, of course, of startsWith and 72 00:04:52,959 --> 00:04:56,759 endsWith. You can compare the value against another string or an array of 73 00:04:56,759 --> 00:05:01,599 strings. It does exactly what it says. Doesn'tStartWith, doesn'tEndWith, nice and 74 00:05:01,599 --> 00:05:02,119 simple there. 75 00:05:02,919 --> 00:05:07,539 Adding the failWhen method to the ThrottlesExceptionQueueMiddleware. Michael 76 00:05:08,979 --> 00:05:12,419 Dza Jha... Oh boy, hmm. 77 00:05:13,499 --> 00:05:19,259 -Michael Japeridze. -Ooh, man. Japeridze. Did you paste that 78 00:05:19,259 --> 00:05:21,379 into, like, some sort of... Nope. 79 00:05:22,159 --> 00:05:24,719 That's a really good one. That's a really good one. Congra- congratulations. 80 00:05:24,719 --> 00:05:27,819 -It's good. -Contributed a failWhen method to the 81 00:05:27,819 --> 00:05:29,799 ThrottlesExceptionMiddleware. So currently, this middleware 82 00:05:30,719 --> 00:05:34,759 only allows for deleting the job when a specific exception is thrown. 83 00:05:35,379 --> 00:05:38,959 There are occasions where you would want to mark the job as failed instead. For 84 00:05:38,959 --> 00:05:43,599 instance, in the context of a job chain, it may be desirable to fail a job when an 85 00:05:43,599 --> 00:05:47,679 exception is thrown so that the chain stops executing rather than deleting the 86 00:05:47,679 --> 00:05:53,159 job from the chain there. So an example is given, you have this middleware. Throttle 87 00:05:53,159 --> 00:05:58,647 the exceptions, delete when a-... fail when, and so you can now do either one of 88 00:05:58,647 --> 00:06:03,668 those, uh, so that's really nice. Pull request 56180 for details if you need. 89 00:06:03,668 --> 00:06:06,687 Additionally, the q- the queue documentation also provides more 90 00:06:06,687 --> 00:06:10,168 information on using that throttles exception middleware, which is really 91 00:06:10,168 --> 00:06:11,287 handy for these jobs. 92 00:06:11,927 --> 00:06:18,267 Uh, Punyabul Sha contributed a new fake method to the queue facade that allows the 93 00:06:18,267 --> 00:06:24,267 same pattern used by the event facade. So before, you'd have to queue fake, and 94 00:06:24,267 --> 00:06:27,827 then afterward, you'd have to do some manual cleanup that was required. Now you 95 00:06:27,827 --> 00:06:32,208 can do queue fake for, and then you can pass in a closure there. The original 96 00:06:32,208 --> 00:06:37,068 queue is automatically restored once that's done. So it only fakes for that 97 00:06:37,068 --> 00:06:41,467 particular instance and then, uh, allows you to do selective job faking there. It 98 00:06:41,467 --> 00:06:44,967 also allows your critical jobs to be queued normally while you're faking the 99 00:06:44,967 --> 00:06:48,107 others. So, really nice, uh, really nice addition there. 100 00:06:48,907 --> 00:06:55,727 Adding JSON serializable interface to the URI class. Uh, Diva Marelis added the 101 00:06:55,727 --> 00:07:00,707 JSON serializable interface to the URI class to make sure that it's properly 102 00:07:00,707 --> 00:07:04,028 converted to JSON when you're serializing that. 103 00:07:04,767 --> 00:07:10,007 We've got the fluent class being made iterable now. So this is, uh, this is 104 00:07:10,007 --> 00:07:14,568 introducing the iter- iterable contract to the fluent class, which addresses a small 105 00:07:14,568 --> 00:07:19,867 paper cut when using fluent with loops. So right now, you need to call toarray in 106 00:07:19,867 --> 00:07:23,927 order to iterate over that. Now the settings property is iterable in Laravel 107 00:07:23,927 --> 00:07:27,167 12.20, so you don't have to do that toarray before iterating over that 108 00:07:27,167 --> 00:07:27,747 anymore. 109 00:07:28,507 --> 00:07:33,127 The collection method was added to the config repository. So Kennedy Tedesco 110 00:07:33,127 --> 00:07:36,387 contributed a collection method to return a collection instance from the config 111 00:07:36,387 --> 00:07:43,268 repository. So now you can say config.dodop.collection and then pass 112 00:07:43,268 --> 00:07:45,887 in the period-separated or the, 113 00:07:46,507 --> 00:07:50,287 um... This is, this is what's used inside of Laravel when you're needing to sort of- 114 00:07:50,287 --> 00:07:50,807 Yeah 115 00:07:50,807 --> 00:07:51,747 -... dig into- -The dot notation 116 00:07:51,747 --> 00:07:55,447 ... dot notation. Thank you. That's what I was searching for. Previously, you would 117 00:07:55,447 --> 00:07:59,468 have to collect the config array. Now you can just do config collection- 118 00:07:59,468 --> 00:08:01,187 -Mm-hmm -... and it will grab out a collection for 119 00:08:01,187 --> 00:08:02,987 -you. -Yeah, I've done that a few times. This is 120 00:08:02,987 --> 00:08:03,327 nice. 121 00:08:03,947 --> 00:08:06,508 -That's super nice. -These, these paper cuts, these little 122 00:08:06,508 --> 00:08:10,407 things that when you see it, when someone submits the pull request and adds it to 123 00:08:10,407 --> 00:08:13,327 -the framework, you go, "Yeah, of course." -Of course. 124 00:08:13,327 --> 00:08:15,447 How have, how have I been living without this? Because the amount of times that 125 00:08:15,447 --> 00:08:19,807 I've done collect config, you know, in, in my time, it's, uh, 126 00:08:20,487 --> 00:08:23,547 just if... I don't know. If you ever repeat these things, just submit a pull 127 00:08:23,547 --> 00:08:23,987 request. 128 00:08:24,608 --> 00:08:28,687 Well, it is great too because, like, if you're using configs in any sort of way 129 00:08:28,687 --> 00:08:32,667 that's more than just pulling a single value from the config, there's many, many, 130 00:08:32,667 --> 00:08:35,647 many times where you're gonna need to pull it into some sort of collection so 131 00:08:35,647 --> 00:08:39,448 you can iterate over and work with those values or pull a specific piece out by 132 00:08:39,448 --> 00:08:39,887 -name- -Yeah 133 00:08:39,887 --> 00:08:43,907 ... or, uh, or you know, do some sort of operations on them rather than just 134 00:08:43,907 --> 00:08:48,127 referencing them as static values. So, um, had to do this a couple times myself, so 135 00:08:48,127 --> 00:08:51,507 this is really nice. Adding closure support to the collection pluck method. 136 00:08:51,507 --> 00:08:54,807 Ralph J. Smith contributed an update to the pluck method that allows 137 00:08:54,807 --> 00:08:59,147 customizations to the keys and the values that are being returned from that pluck. 138 00:08:59,147 --> 00:09:02,687 Sounds, uh... Does just like what it sounds like. You get that pluck passing a 139 00:09:02,687 --> 00:09:08,087 closure, then you can return, uh, whatever you like from that. Um, so there you have 140 00:09:08,087 --> 00:09:12,247 that. Context blade directive, Martin Bean contributed a context blade directive 141 00:09:12,247 --> 00:09:18,047 to determine if a context value exists inside of a blade file, of course. So 142 00:09:18,047 --> 00:09:23,087 context canonical if it is. So it's like a conditional set up, so instead of if 143 00:09:23,087 --> 00:09:28,467 context has the word canonical, then do this. Nope, no longer needed. You just 144 00:09:28,467 --> 00:09:34,067 specify @context in your blade file, and if the key that you pass in there exists, 145 00:09:34,067 --> 00:09:38,847 the following portion will then render. Really nice there. Pull request 56146. Of 146 00:09:38,847 --> 00:09:43,407 course, you can see all of the changes and fixes inside of the release notes for 147 00:09:43,407 --> 00:09:46,487 1219 and 1220 on GitHub. 148 00:09:47,407 --> 00:09:49,847 -There you have it. -Just a... Just on that context one, does 149 00:09:49,847 --> 00:09:51,687 that also then inject 150 00:09:52,347 --> 00:09:54,367 a value? It does. Very cool. 151 00:09:55,007 --> 00:09:56,267 -So not only does it- -Hmm. That was nice 152 00:09:56,267 --> 00:09:58,787 ... provide you that conditional check, it will 153 00:09:59,507 --> 00:10:03,847 provide the value of that context parameter in the value 154 00:10:04,547 --> 00:10:05,627 -variable. -Yeah. 155 00:10:05,627 --> 00:10:11,347 So the dollar value will be whatever it is the context get of that key. So that is, 156 00:10:11,347 --> 00:10:13,387 that is smart thinking, Martin. Like that one. 157 00:10:14,667 --> 00:10:15,247 Very nice. 158 00:10:16,107 --> 00:10:22,887 On to the news. JetBrains PHPverse 2025 happened a few weeks ago 159 00:10:22,887 --> 00:10:28,467 to commemorate, to celebrate the 30th anniversary or the 30th birthday of PHP, 160 00:10:28,467 --> 00:10:31,367 which brought together core contributors, framework authors, and passionate 161 00:10:31,367 --> 00:10:35,287 community members for a one day event packed with insightful talks. From long 162 00:10:35,287 --> 00:10:38,967 time maintainers to new faces in internals, the event served as both a 163 00:10:38,967 --> 00:10:42,867 reflection on PHP's evolution and a glimpse of what's coming next. It was 164 00:10:42,867 --> 00:10:48,147 streamed online and peaked at 4,000 simultaneous watchers live from all over 165 00:10:48,147 --> 00:10:52,007 the world, and now all the talks have been published, so it's the perfect time to 166 00:10:52,007 --> 00:10:55,307 revisit the key moments and catch up with any of the talks that you might have 167 00:10:55,307 --> 00:11:00,927 missed. So it talks about FrankenPHP, which is now a official part of the PHP 168 00:11:00,927 --> 00:11:06,407 project. It is, uh, used as like a, a driver, I think is the, the terminology 169 00:11:06,407 --> 00:11:08,307 for something like Laravel Octane. 170 00:11:08,947 --> 00:11:14,167 Talked about 20 years of Symfony, uh, MCP in PHP, how AI is changing the tech 171 00:11:14,167 --> 00:11:18,707 industry. There was a Q&A with our very own Taylor Otwell, the fu- future of PHP 172 00:11:18,707 --> 00:11:22,847 education, growing PHP for the future, and so on. So we'll have links to all of that 173 00:11:22,847 --> 00:11:27,747 for you in the show notes. There's also some cool PHPverse swag, and no event, of 174 00:11:27,747 --> 00:11:29,867 course, is complete without awesome swag, and 175 00:11:30,647 --> 00:11:35,087 the JetBrains team went above and beyond. Each attendee received a bag filled with 176 00:11:35,087 --> 00:11:40,387 PhpStormStorm shirts and hoodies, a mouse pad, a, an elephant, uh, a PHP elephant 177 00:11:40,387 --> 00:11:44,507 Lego, and more. Uh, some of the items are available on the swag store. I had a look 178 00:11:44,507 --> 00:11:48,027 earlier. There is T-shirts. There is a hoodie. Um, and there are some pins and 179 00:11:48,027 --> 00:11:51,767 stickers as well, so check that out, uh, if you wanna get involved in any of that 180 00:11:51,767 --> 00:11:54,867 stuff. So, uh, links to all that in the show notes. 181 00:11:55,607 --> 00:11:59,187 Love the Lego PHP elephant. Pretty exclusive stuff there. 182 00:11:59,187 --> 00:12:00,827 -Mm-hmm. -I have a feeling there's gonna be quite a 183 00:12:00,827 --> 00:12:04,447 few people scrambling to get their hands on that one. Really, really cool stuff. 184 00:12:04,447 --> 00:12:07,827 Thanks so much, JetBrains, for putting that together. Uh, great, great work on 185 00:12:07,827 --> 00:12:14,752 that.All right. Laravel in 2025. So as crazy as it sounds, 186 00:12:14,752 --> 00:12:19,231 July 2nd was the midpoint of this year, which means we're more than halfway 187 00:12:19,231 --> 00:12:23,411 through the year. Yikes. So the team here at Laravel News thought it'd be nice to 188 00:12:23,411 --> 00:12:28,212 recap some of the most memorable moments so far at Laravel News. So the following 189 00:12:28,212 --> 00:12:31,632 posts that we're gonna talk about are a mix of some of our most popular posts, 190 00:12:31,632 --> 00:12:35,831 community milestones, as well as products and events that have happened. So let's 191 00:12:35,831 --> 00:12:40,832 start with Laravel 12. We used to have Laracon Online, which is where we would do 192 00:12:40,832 --> 00:12:43,692 some of these bigger announcements, but then some of these, now that we don't have 193 00:12:43,692 --> 00:12:49,271 Laracon Online, are just taking place on Bluesky and on X, right? So Laravel 12 was 194 00:12:49,271 --> 00:12:56,031 released on February 2024, uh, of this year. So, uh, sorry. I said 2024. February 195 00:12:56,031 --> 00:13:02,111 24th of 2025, my apologies. Um, there was also the new starter kits that were 196 00:13:02,111 --> 00:13:06,251 launched with that, with the first-party starter kits. The Laravel Installer also 197 00:13:06,251 --> 00:13:10,971 now supports these custom starter kits, which is really neat. If you have not yet 198 00:13:10,971 --> 00:13:15,911 seen that or read about that, we have that in a blog post. Uh, you should check this 199 00:13:15,911 --> 00:13:19,091 one out. The custom starter kits are really, really powerful. It used to be, 200 00:13:19,691 --> 00:13:23,671 um, a lot more difficult to do this, but now you can install Laravel using these 201 00:13:23,671 --> 00:13:27,671 custom starter kits. It's a great way to get apps up and running, um, really 202 00:13:27,671 --> 00:13:33,451 quickly using your custom configuration. Uh, Laravel 12 was also insanely easy to 203 00:13:33,451 --> 00:13:38,471 upgrade compared to previous versions of Laravel. So it used to be that it was, you 204 00:13:38,471 --> 00:13:42,871 know, quite a few steps you'd have to take between, uh, versions. Laravel 12 was 205 00:13:42,871 --> 00:13:46,891 by far the easiest. Now I still happened to use Laravel Shift for all the ones that 206 00:13:46,891 --> 00:13:50,731 we moved from 11 to 12. Just a couple little pieces and, and parts that are 207 00:13:50,731 --> 00:13:54,631 really nice to just have Laravel Shift to take care of for you, but by and large, it 208 00:13:54,631 --> 00:13:58,911 was basically a composer.json update and that was about it. It was really, really 209 00:13:58,911 --> 00:13:59,591 -good. -Mm-hmm. 210 00:13:59,591 --> 00:14:04,451 It also leverages Inertia 2.0 for the Vue and React Starter Kits. If you did have 211 00:14:04,451 --> 00:14:07,731 Nova running, you were gonna have to... I- if it was on a older version, you were 212 00:14:07,731 --> 00:14:10,751 gonna have to upgrade that as well. So again, that is one other thing to be aware 213 00:14:10,751 --> 00:14:12,891 of, uh, when you're, uh, shifting. 214 00:14:13,731 --> 00:14:18,191 The Laravel Shift will help take care of for you as well. Uh, but great upgrade 215 00:14:18,191 --> 00:14:22,771 there. The path from 11 to 12 was amazing, so great job to the Laravel team on that 216 00:14:22,771 --> 00:14:27,331 front. Laravel Cloud was also released in February along with the Laravel 12 217 00:14:27,331 --> 00:14:31,271 release. This is, of course, a fully managed infrastructure platform and the 218 00:14:31,271 --> 00:14:35,691 fastest way to deploy and scale your Laravel applications. Lots of beta testers 219 00:14:35,691 --> 00:14:38,971 helped to contribute to making this what it is today. And of course, the team has 220 00:14:38,971 --> 00:14:45,511 done an amazing job on making the UI feel absolutely amazingly buttery smooth. I- I 221 00:14:45,511 --> 00:14:46,191 literally can't 222 00:14:47,171 --> 00:14:52,931 think of a better way to describe it. It just feels so good to use, and so great 223 00:14:52,931 --> 00:14:56,571 job to the team on that one. Know lots and lots of time was poured into making that 224 00:14:56,571 --> 00:14:59,531 what it is today, and if you haven't checked it out, you definitely should. 225 00:15:00,131 --> 00:15:06,211 Native PHP Mobile version 1 launched on May 2nd, which brings your Laravel app to 226 00:15:06,211 --> 00:15:11,191 the iOS and Android device stores. There's been, you know, lots of years that we've 227 00:15:11,191 --> 00:15:15,531 been developing web applications that we can launch onto the web using Laravel. 228 00:15:15,531 --> 00:15:20,951 Amazing. But you can now use that same language and that same set of things that 229 00:15:20,951 --> 00:15:24,631 you've learned to build apps that you can bring to the App Store and to the Google 230 00:15:24,631 --> 00:15:30,231 Play Store with Native PHP for Mobile v1. So huge release on that front, um, and, 231 00:15:30,231 --> 00:15:35,851 uh, really excited to see what people are building, uh, with this new, um, library. 232 00:15:35,851 --> 00:15:36,151 Okay. 233 00:15:36,771 --> 00:15:41,671 The big one here, Laravel Nightwatch, was also released. So I, in particular, am 234 00:15:41,671 --> 00:15:45,711 more, was more excited about Nightwatch than I was about Cloud. I've got a lotta 235 00:15:45,711 --> 00:15:48,911 stuff that I- I already have running inside of Forge that I've been really 236 00:15:48,911 --> 00:15:52,651 happy with and have not needed necessarily to switch to Cloud, but Nightwatch is one 237 00:15:52,651 --> 00:15:55,631 of those things that I could add to every single one of my projects. So it's a 238 00:15:55,631 --> 00:15:58,811 first-party product with deep monitoring and insights for all of your Laravel 239 00:15:58,811 --> 00:16:02,391 applications, no matter where you deploy them, and, uh, you can get started by, 240 00:16:02,391 --> 00:16:08,151 like, checking out nightwatch.laravel.com. Really, really cool. Tailwind version 4 241 00:16:08,151 --> 00:16:12,411 was released. Of course, the community has been largely behind Tailwind for a long 242 00:16:12,411 --> 00:16:16,551 time. Adam Wathan, long-time Laravel community member, uh, who created 243 00:16:16,551 --> 00:16:21,991 Tailwind, of course. And so on January 22nd, Tailwind version 4 was released with 244 00:16:21,991 --> 00:16:26,431 a brand new high-performance engine, CSS First configuration, simplified 245 00:16:26,431 --> 00:16:29,451 installation and more, which we have a release post that you can read about 246 00:16:29,451 --> 00:16:34,231 there, um, in the blog post here. Of course, there's plenty more to come this 247 00:16:34,231 --> 00:16:38,591 year. Uh, we've got Laracon US right around the corner from July 29th to 30th. 248 00:16:38,591 --> 00:16:43,471 Hopefully, we'll see you there. Expected, uh, to announce some new updates to 249 00:16:43,471 --> 00:16:46,911 Laravel Forge, which I'm really excited about. Livewire 4 was also mentioned to be 250 00:16:46,911 --> 00:16:51,651 released, uh, hopefully at Laracon US 2025 live from the stage. We've got 251 00:16:51,651 --> 00:16:56,531 Laravel Live Denmark coming up in August. We've got, uh, Laracon AU, of course, 252 00:16:56,531 --> 00:17:00,471 November 13th to the 14th. Uh, an opportunity to learn and share and connect 253 00:17:00,471 --> 00:17:03,571 with like-minded people, level up your skills, knowledge, and Laravel 254 00:17:03,571 --> 00:17:07,471 applications. You can still grab tickets for that. And then, of course, November 255 00:17:07,471 --> 00:17:12,391 20th of 2025 is when PHP 8.5 launches, so we're gonna talk about that a little bit 256 00:17:12,391 --> 00:17:16,731 more in the show as well. That is our first half of the year. Looking forward to 257 00:17:16,731 --> 00:17:18,431 the rest of the year. It's gonna be a good one. 258 00:17:19,351 --> 00:17:23,371 Yeah. Lots, uh... A lot of big stuff happened in the, in the front half of this 259 00:17:23,371 --> 00:17:24,831 year, so it's gonna be interesting to see 260 00:17:25,491 --> 00:17:28,471 what the, uh, Laravel team in particular has been cooking up, 261 00:17:29,311 --> 00:17:33,831 uh, in that time on top of... Obviously, they're much bigger now, so they have the 262 00:17:33,831 --> 00:17:38,871 capacity to do a lot more things. Um, and, and as you say, Nightwatch and Cloud 263 00:17:38,871 --> 00:17:42,551 launching in the, in the first half of this year, not, not small things by any 264 00:17:42,551 --> 00:17:46,971 stretch. So to have the capacity to do that, to launch that, to maintain that, 265 00:17:46,971 --> 00:17:51,391 and, you know, to look to the future as well. Taylor's got a two-hour keynote this 266 00:17:51,391 --> 00:17:53,311 -year on the first day, so- -Yeah. Yeah. It's gonna be crazy. 267 00:17:53,311 --> 00:17:57,811 Uh, looking forward to that. On- on that, the, the schedule for Laracon US is up now 268 00:17:57,811 --> 00:18:01,391 as well, so if you hadn't seen that, uh, if you didn't see the email or if you 269 00:18:01,391 --> 00:18:05,411 haven't seen online, check that out. Uh, there's a lot of cool stuff, interesting 270 00:18:05,411 --> 00:18:12,371 talks on the horizon for that.Another one that I really enjoyed and immediately, uh, 271 00:18:12,371 --> 00:18:17,371 upgraded was the ability to run Laravel Pint faster in parallel mode. So it was 272 00:18:17,371 --> 00:18:22,432 recently updated with a new --parallel flag that makes Pint run 40 times faster 273 00:18:22,432 --> 00:18:27,032 and will fully leverage the parallel capabilities of phpcs-fixer. You can use 274 00:18:27,032 --> 00:18:32,631 it using /vendor/bin/pint --parallel. The flag is marked as e- experimental and is 275 00:18:32,631 --> 00:18:36,272 potentially unstable, but to access this flag, all you need to do is update to the 276 00:18:36,272 --> 00:18:41,971 latest version of Laravel Pint, uh, at least version 1.23.0. 277 00:18:42,671 --> 00:18:46,571 Along with the --parallel flag, this also allows extending a Pint configuration from 278 00:18:46,571 --> 00:18:49,971 another file. This is useful if you have an organization Pint config you share 279 00:18:49,971 --> 00:18:54,511 across projects, however, want to tweak a few settings on a per project basis. 280 00:18:55,331 --> 00:18:55,631 Um, 281 00:18:56,731 --> 00:19:01,171 yeah. Big- big fan that being able to run and leverage multiple processes, 282 00:19:01,171 --> 00:19:05,411 especially in things like CI to try and get those processes to run quicker, you 283 00:19:05,411 --> 00:19:10,011 wanna get feedback in those cycles as quick as possible, so shout out to Nuno 284 00:19:10,011 --> 00:19:12,231 and the Pint team for that one. 285 00:19:14,031 --> 00:19:19,972 Awesome. Uh, speaking of NativePHP, which we just mentioned about the first half of 286 00:19:19,972 --> 00:19:25,412 2025, uh, since they launched NativePHP for mobile in May, they've been building 287 00:19:25,412 --> 00:19:31,371 fast and quiet, running, uh, and refining the core, creating better tooling, 288 00:19:31,371 --> 00:19:37,972 expanding what was possible with it. So version 1.1 drops July 14th, which is 289 00:19:37,972 --> 00:19:42,172 today, the date of this recording, and it isn't just like a collection of fixes. 290 00:19:42,172 --> 00:19:46,492 It's really a foundation upgrade to make these apps easier to build, faster to 291 00:19:46,492 --> 00:19:49,791 ship, and ready for real production work. So let's talk about a couple of the things 292 00:19:49,791 --> 00:19:53,171 that have been brought to 1.1. First is modular 293 00:19:53,791 --> 00:19:58,492 native APIs. Here's what we mean by that. Previous to this, everything was sort of 294 00:19:58,492 --> 00:20:03,011 stuffed under this system class. We had system, uh, you know, double parens, and 295 00:20:03,011 --> 00:20:07,012 then you could get to all these mod- these, uh, native APIs, like biometrics or 296 00:20:07,012 --> 00:20:11,091 camera, dialogues, geolocations, things like that. No longer do you have to do 297 00:20:11,091 --> 00:20:16,071 that. They all have their own dedicated facades, so you have biometrics under its 298 00:20:16,071 --> 00:20:20,691 own namespace. Camera, dialogue, geolocation, haptics, push notifications, 299 00:20:20,691 --> 00:20:25,351 secure storage, and then system. So each one is designed by itself to be 300 00:20:25,351 --> 00:20:30,191 predictable, documented, and then easy to expand. So this sets the tone for all 301 00:20:30,191 --> 00:20:34,851 future native features, pulling them into their own facades so they can be really 302 00:20:34,851 --> 00:20:39,491 focused and testable rather than having them all crammed under one spot. There 303 00:20:39,491 --> 00:20:45,031 also are a couple new features, secure storage, geolocation, and gallery picker. 304 00:20:45,031 --> 00:20:49,751 So these are new native capabilities that you have access to. Secure storage allows 305 00:20:49,751 --> 00:20:53,791 you to store tokens, secrets, and credentials using that device's native 306 00:20:53,791 --> 00:20:58,151 keychain or keystore, which is incredibly powerful. Of course, geolocation is a big 307 00:20:58,151 --> 00:21:02,091 one if you ever need accurate location data, so you can now ask for that in the 308 00:21:02,091 --> 00:21:05,091 permissions support. It's cross-platform supported, which is excellent, 309 00:21:05,831 --> 00:21:11,171 and then gallery picker is when you allow users to select media that they want your 310 00:21:11,171 --> 00:21:15,871 app to be able to access. If you've ever used an application with modern, uh, 311 00:21:15,871 --> 00:21:20,411 privacy focus, you know that it needs to gain permission to not... You know, it 312 00:21:20,411 --> 00:21:23,971 used to be, "Do you give us access to all your photos?" And you had to say yes or 313 00:21:23,971 --> 00:21:27,291 no, and now you can be more selective in which things you want to share. This 314 00:21:27,291 --> 00:21:31,691 gallery picker is essentially that. So they're now fully integrated into Laravel, 315 00:21:31,691 --> 00:21:35,871 no plugins, no separate workfl- flows, just these really powerful APIs that you 316 00:21:35,871 --> 00:21:36,591 already understand. 317 00:21:37,351 --> 00:21:42,731 ENV handling was also something that was annoying. Previously, in Android, if you 318 00:21:42,731 --> 00:21:47,451 ever changed the ENV values, you had to run PHP artisan native_installforce. This 319 00:21:47,451 --> 00:21:52,091 was a destructive step, so it wiped your entire project and required you to rerun 320 00:21:52,091 --> 00:21:56,611 that native run. You don't have to do that anymore. They've now moved all that logic 321 00:21:56,611 --> 00:22:00,911 into native_run。 So when you update that ENV, it changes the whole thing without 322 00:22:00,911 --> 00:22:05,571 deleting anything. Uh, so fewer surprises, no wasted time. Uh, same as what it was 323 00:22:05,571 --> 00:22:10,331 in iOS, that's now the same in Android now. Okay, couple of things that sound 324 00:22:10,331 --> 00:22:13,731 less exciting, but they're actually allowing you to do some really cool stuff. 325 00:22:13,731 --> 00:22:20,611 Full CLI flag support. So version 1.1 introduces this ability to allow you 326 00:22:20,611 --> 00:22:25,811 to pass those flags to that native_run function, unlocking true automation. What 327 00:22:25,811 --> 00:22:29,771 do we mean by that? You can now run these native PHP actions, uh, sorry, these 328 00:22:29,771 --> 00:22:34,131 native PHPs, uh, functions in GitHub Actions in your deploy scripts or in your 329 00:22:34,131 --> 00:22:38,691 staging pipelines so that you don't have to have prompts or manual steps built in 330 00:22:38,691 --> 00:22:42,531 there. You just pass the flags, and it sort of does it silently for you. Really, 331 00:22:42,531 --> 00:22:43,031 really nice. 332 00:22:43,671 --> 00:22:50,371 Also, a undersold feature here, smaller, faster binaries. So in Android, they went 333 00:22:50,371 --> 00:22:55,331 into their PHP build, and they cut it in half, essentially, from 16 megs down to 8 334 00:22:55,331 --> 00:23:01,671 megs. Um, in Android with ICU, from 44 megs down to 35 megs, and in iOS, they cut 335 00:23:01,671 --> 00:23:06,791 it in half as well, 55 megabytes down to 22 megabytes. So faster downloads, lighter 336 00:23:06,791 --> 00:23:10,871 binaries, li- lighter bundles, and better performance. Uh, so really, really good 337 00:23:10,871 --> 00:23:16,051 stuff there. Um, there are a couple other items, uh, including rewritten 338 00:23:16,051 --> 00:23:20,251 documentation, uh, real testing infrastructure with unit tests and 339 00:23:20,251 --> 00:23:25,611 end-to-end tests. Uh, there is a Kitchen Sink app that's now live on the Play f- 340 00:23:25,611 --> 00:23:28,931 Play Store, so you can take a look at some of these features that we just talked 341 00:23:28,931 --> 00:23:32,311 about, secure storage, geolocation, gallery picture- picker, uh, that you 342 00:23:32,311 --> 00:23:36,451 could download and kinda check that out on your device to see how that feels, and 343 00:23:36,451 --> 00:23:41,311 then, uh, you can, uh, take a look at the merch store that they've also launched, 344 00:23:41,311 --> 00:23:43,711 which is shop.nativephp.com. 345 00:23:44,391 --> 00:23:49,231 Whoo, bunch of stuff there, all available to you as of the time of this recording. 346 00:23:49,231 --> 00:23:53,011 If you're using that, you should definitely upgrade. Uh, it's a good one. 347 00:23:53,011 --> 00:23:56,751 Thanks so much to Shane Rosenthal and the team over there for writing this one up. 348 00:23:58,951 --> 00:24:04,903 Next up, the Laravel Claude A-... code setup repo is a one command setup for 349 00:24:04,903 --> 00:24:10,004 AI-powered Laravel development with Claude code and MCP servers. It will help you to 350 00:24:10,004 --> 00:24:14,163 automatically configure all MC- MCP servers for the ultimate AI-powered 351 00:24:14,163 --> 00:24:18,983 Laravel development experience with Figma integration. The Figma integration 352 00:24:18,983 --> 00:24:22,343 features seems like they could be very powerful, helping you automatically create 353 00:24:22,343 --> 00:24:25,864 views, extract design system, build components, and more. 354 00:24:26,504 --> 00:24:30,043 Uh, main features include global MCP servers that are shared across all of your 355 00:24:30,043 --> 00:24:33,684 projects, GitHub integration that accesses all your repositories to manage 356 00:24:33,684 --> 00:24:38,263 PRs with automatic token configuration, a memory system to remember decisions across 357 00:24:38,263 --> 00:24:43,663 projects, Context 7, which is the latest Laravel ph- which provides the latest 358 00:24:43,663 --> 00:24:47,883 Laravel and PHP documentation access. There is web fetch for accessing external 359 00:24:47,883 --> 00:24:52,583 APIs and resources, Figma integration to provide design-to-code workflows with 360 00:24:52,583 --> 00:24:56,504 automatic design token extraction, automatic design token extraction , 361 00:24:56,504 --> 00:25:00,823 providing colors, typography, and spacing for Tailwind CSS, and a Laravel debug bar 362 00:25:00,823 --> 00:25:05,543 providing real-time debugging if installed, and more. Uh, it's pretty 363 00:25:05,543 --> 00:25:09,143 simple to get up and running. There is a curl command that you can run through 364 00:25:09,143 --> 00:25:12,303 Bash, um, and then, uh, get everything up and running. 365 00:25:13,083 --> 00:25:16,703 You can get started with the package by reading the readme and the docs folder, 366 00:25:16,703 --> 00:25:19,163 which we'll have links to for you in the show notes. 367 00:25:20,303 --> 00:25:23,723 Well, hey, folks. We talked about a little bit earlier that PHP 8.5 is getting 368 00:25:23,723 --> 00:25:27,303 released in November 20th of this year, so the next couple items that we have here 369 00:25:27,303 --> 00:25:32,643 are all related to Laravel, sorry, not Laravel, PHP 8.5. So, this first one is 370 00:25:32,643 --> 00:25:36,443 written up by Paul Redmond, everyone's favorite human, really good, and he talks 371 00:25:36,443 --> 00:25:39,603 about, he- he goes into quite a bit of depth on this. I'm just gonna skim the 372 00:25:39,603 --> 00:25:42,783 surface on this one, and if you want to read the additional details of it, please 373 00:25:42,783 --> 00:25:45,143 feel free to go and read it. But the- the 374 00:25:46,183 --> 00:25:51,063 headline is this, array_first_ and array_last_ functions are being made 375 00:25:51,723 --> 00:25:55,203 a reality inside of PHP 8.5. So, 376 00:25:56,183 --> 00:26:01,463 this has had user land implementations and polyfills by Symfony, by Laravel, by 377 00:26:01,463 --> 00:26:05,943 other things, uh, throughout, you know, forever, right? These- these 378 00:26:06,943 --> 00:26:11,643 complement some things that were already pulled in in PHP 7.3, which were 379 00:26:11,643 --> 00:26:13,963 array_key_first_ and array_key_last. 380 00:26:15,203 --> 00:26:19,063 But again, without going into too much depth as far as how it works and how these 381 00:26:19,063 --> 00:26:23,103 polyfill works, just know that array_first_ and array_last_ will now be 382 00:26:23,103 --> 00:26:27,883 available to you natively inside of PHP 8.5 in November. 383 00:26:29,203 --> 00:26:29,903 -Perfect. -There we go. 384 00:26:31,043 --> 00:26:36,263 The pipe operator is also coming to PHP 8.5 when it will be released on November 385 00:26:36,263 --> 00:26:39,883 20th. The operator is an exciting prospect for PHP developers wanting to chain 386 00:26:39,883 --> 00:26:44,243 multiple callables together, passing a value through them from left to right in a 387 00:26:44,243 --> 00:26:44,943 native way. 388 00:26:45,743 --> 00:26:46,783 The pipe operator 389 00:26:47,403 --> 00:26:51,363 accepts a single parameter callable on the right and passes the left side value to 390 00:26:51,363 --> 00:26:55,783 it, evaluating to the callable's result. Now, if that doesn't make much sense to 391 00:26:55,783 --> 00:27:00,983 you, any time you have used Laravel's collections and chained on a filter and 392 00:27:00,983 --> 00:27:06,703 then a map and then a first- or whatever, this is a similar concept but supported 393 00:27:06,703 --> 00:27:11,403 natively within PHP. So you can get a long way to do things like 394 00:27:12,083 --> 00:27:17,243 running a string through HTML entities and then string split and then mapping to 395 00:27:17,243 --> 00:27:22,463 uppercase things and then filter the values, all using native PHP functions. 396 00:27:22,463 --> 00:27:26,823 Um, the p- performance benefits would- would be the main thing to do this, having 397 00:27:26,823 --> 00:27:31,403 this functionality native. I wonder if any of the Laravel connection stuff, uh, 398 00:27:31,403 --> 00:27:35,443 collection stuff can be adapted to maybe leverage this functionality under the 399 00:27:35,443 --> 00:27:39,563 hood/behind the scenes. Uh, but it does mean that there will be situations where 400 00:27:39,563 --> 00:27:45,263 you can sort of map and filter and reduce using the native pipe functionality in 401 00:27:45,263 --> 00:27:48,903 situations where nec- you don't necessarily have to reach for the 402 00:27:48,903 --> 00:27:50,403 collection functionality. So, 403 00:27:51,043 --> 00:27:56,663 uh, definitely check that out. Uh, it will be released as part of PHP 8.5 in 404 00:27:56,663 --> 00:27:57,123 November. 405 00:27:58,003 --> 00:28:00,483 That is incredible, honestly. I- I just... 406 00:28:01,523 --> 00:28:04,483 It feels like these things used to only be... 407 00:28:05,143 --> 00:28:07,903 They only existed in some 408 00:28:08,523 --> 00:28:13,963 parallel universe where PHP was willing to accept these sorts of things. And I feel 409 00:28:13,963 --> 00:28:14,363 -like- -Mm-hmm 410 00:28:14,363 --> 00:28:19,263 ... in the last couple releases, like, the dam has broken and all of these amazing 411 00:28:19,263 --> 00:28:24,203 new features are flooding in, and it just feels like it is such a wonderful time to 412 00:28:24,203 --> 00:28:26,443 -be a PHP developer, doesn't it? I mean- -Yeah 413 00:28:26,443 --> 00:28:31,003 ... there's just so many cool features that we get. And not only that, but we 414 00:28:31,003 --> 00:28:33,723 have the community keeping us updated, 'cause that was some of the other parts of 415 00:28:33,723 --> 00:28:36,963 it too, is I feel like it used to be that Laravel... Oh sorry, not Laravel. PHP 416 00:28:36,963 --> 00:28:38,663 -releases would kind of come and go- -Mm-hmm 417 00:28:38,663 --> 00:28:41,783 ... and nobody was really any the wiser as far as what the new features were. They 418 00:28:41,783 --> 00:28:44,443 had, maybe there were some break/fix things stuff in there, but there was none 419 00:28:44,443 --> 00:28:49,163 of these new sort of banner features that were coming out that people wanted to 420 00:28:49,163 --> 00:28:53,723 upgrade to get. And this is one of those big ones, the pipe operator. That's so 421 00:28:53,723 --> 00:28:57,463 cool. Now, the syntax is really interesting. I think it looks good, it's 422 00:28:57,463 --> 00:28:59,423 -just gonna be weird to get used to. -Mm-hmm. 423 00:28:59,423 --> 00:29:02,063 It's sort of... You know what I mean? I'll have to kind of go back and go, "What-" 424 00:29:02,063 --> 00:29:06,143 -It's very uncharacteristic for PHP. -Yeah. Yeah, exactly. Like, what was that 425 00:29:06,143 --> 00:29:08,043 -operator again? Pipe arrow? -Yeah. 426 00:29:08,043 --> 00:29:08,643 -Okay. -Yeah. 427 00:29:08,643 --> 00:29:11,383 Like that's just... You know, it's interesting. I- I think it's a good one, 428 00:29:11,383 --> 00:29:12,323 -right? It's- -Yeah. 429 00:29:12,323 --> 00:29:13,983 -You know? -I think it's borrowed from, like,- 430 00:29:13,983 --> 00:29:15,603 -I think it's got to come with this- -.Dot Net or something like that. 431 00:29:15,603 --> 00:29:17,623 -Okay. -Or- or C Sharp. So it's... Yeah, it's, 432 00:29:17,623 --> 00:29:19,843 there's- there's an established... And a lot of the stuff that 433 00:29:20,943 --> 00:29:23,023 PHP has been adding in recent times 434 00:29:23,743 --> 00:29:25,103 does have 435 00:29:26,163 --> 00:29:30,123 a history in other languages. And so it's- it's easier to kind of 436 00:29:31,043 --> 00:29:34,803 have something familiar for people that move between languages, perhaps, when you 437 00:29:34,803 --> 00:29:37,763 look at what's already out there before implementing. I think the- the- the big 438 00:29:37,763 --> 00:29:38,523 thing is, well, 439 00:29:39,143 --> 00:29:44,203 not so much, you know, not wanting to do things or not bringing things in because 440 00:29:44,203 --> 00:29:47,483 Symfony had it or because P- uh, Laravel had it, or whatever else. I think the- 441 00:29:47,483 --> 00:29:48,943 the- the main reason 442 00:29:49,563 --> 00:29:53,723 is because the PHP Foundation exists now. That there is people that are actually 443 00:29:53,723 --> 00:29:59,063 paid to develop and support PHP the language, and they're doing this in a full 444 00:29:59,063 --> 00:30:04,856 time capacity. That there is now active community support...... to, you know, 445 00:30:04,856 --> 00:30:08,975 enable people to work on this, not just in their free time, not, you know, whenever 446 00:30:08,975 --> 00:30:13,275 they're, they're a- able to, but to do it in a full-time capacity. And that, I 447 00:30:13,275 --> 00:30:19,415 think, has s- you know, moved a lot forward in terms of the ability for PHP to 448 00:30:19,415 --> 00:30:26,195 manage releases, to communicate releases, to, to do more exciting things more often 449 00:30:26,195 --> 00:30:30,695 and more regularly than, you know, what we had before. So shout out to everyone 450 00:30:30,695 --> 00:30:31,975 that is involved in that. 451 00:30:32,875 --> 00:30:37,555 Absolutely. Well, uh, along with all of this, you might be asking yourself too, 452 00:30:37,555 --> 00:30:42,116 like, "How can I get started just testing out PHP 8.5? What's the easiest way for me 453 00:30:42,116 --> 00:30:44,395 to do that?" Well, we're gonna talk about that a little bit here, but we're also 454 00:30:44,395 --> 00:30:48,155 gonna talk about another feature that 8.5 introduces, which is a diff option 455 00:30:48,895 --> 00:30:51,116 for the PHP INI flag. So 456 00:30:51,835 --> 00:30:58,655 PHP-- INI previously would show you, hey, here are the values, um, that are loaded, 457 00:30:58,655 --> 00:31:03,635 uh, as well as maybe showing you here's the path that you're loading it from. Um, 458 00:31:03,635 --> 00:31:09,295 but this, uh, there's a couple cool new things here, um, that are, are going to be 459 00:31:09,295 --> 00:31:11,555 available to us starting in 8.5. So 460 00:31:12,275 --> 00:31:17,075 you can use this diff, uh, to show you the INI values that are different from the 461 00:31:17,075 --> 00:31:23,235 built-in default values. So if you do PHP-- INI=diff and it says, "Here are all 462 00:31:23,235 --> 00:31:29,595 the loaded values that were made to be different based on INI files that you were 463 00:31:29,595 --> 00:31:34,095 loading in." And sometimes that's not always easy to identify either. Where are 464 00:31:34,095 --> 00:31:39,535 my loading these INI files from? Am I loading multiple INI files? And so, uh, 465 00:31:39,535 --> 00:31:44,575 Paul Redmond talks about how you can go through and get a little taste of this as 466 00:31:44,575 --> 00:31:50,335 well as, uh, mess around a bit with being able to see not only what ones are 467 00:31:50,335 --> 00:31:55,115 different, but where am I loading them in from? And so he talks about specifically 468 00:31:55,115 --> 00:31:59,055 here using Docker. Now, Docker is one of those things some people don't really like 469 00:31:59,055 --> 00:32:02,655 to get involved with it, and me being one of those, raise your hand. Um, but he 470 00:32:02,655 --> 00:32:08,195 talks about how you can use Docker in order to be able to set up a new PHP 8.5 471 00:32:08,195 --> 00:32:12,795 demo. And then he shows, here's how we can see what the INI values are before, and 472 00:32:12,795 --> 00:32:16,115 then here's how we can see what it looks like after we load these, uh, INIs. And 473 00:32:16,115 --> 00:32:20,375 then we can also see here are any loaded configuration files, which is gonna point 474 00:32:20,375 --> 00:32:24,655 you to all the INIs that got loaded in order to produce that difference between 475 00:32:24,655 --> 00:32:29,035 what the default values are and what your new values are. So if this is something 476 00:32:29,035 --> 00:32:32,755 you'd like to play with before 8.5 was released, this is a great tutorial to go 477 00:32:32,755 --> 00:32:33,055 through. 478 00:32:33,835 --> 00:32:35,375 It's not a long one. We're talking about, 479 00:32:36,215 --> 00:32:41,235 uh, 10-minute read here, right? From actually getting it, started reading it, 480 00:32:41,235 --> 00:32:45,675 to actually getting through the end of it with a, a, a Docker 8.5 install. So should 481 00:32:45,675 --> 00:32:48,095 be a good one. If that's something you'd like to play with, definitely check that 482 00:32:48,095 --> 00:32:48,455 one out. 483 00:32:49,975 --> 00:32:56,475 The last PHP 8.5 feature we have to talk about today is fatal error backtraces. In 484 00:32:56,475 --> 00:33:01,115 PHP 8.5, a new fatal error backtraces setting can control whether a backtrace is 485 00:33:01,115 --> 00:33:06,555 shown for fatal errors. Fatal errors without backtraces in today's stable PHP 486 00:33:06,555 --> 00:33:11,115 versions, for example, 8.4, might include parse errors for syntax errors, duplicate 487 00:33:11,115 --> 00:33:15,415 functions or classes, infinite loops, and, uh, max execution time and so on. 488 00:33:17,235 --> 00:33:22,435 So if you run code in PHP 8.4, you'll get, uh, if you try to declare a class 489 00:33:22,435 --> 00:33:25,835 multiple times, for example, you'll get a fatal error that says, "Cannot declare 490 00:33:25,835 --> 00:33:29,895 class B because the name is already in use." And it will just tell you where that 491 00:33:29,895 --> 00:33:35,095 error happened. Starting in PHP 8.5, you'll get more helpful information that 492 00:33:35,095 --> 00:33:39,855 led to the fatal error. Clearly, this is derive, uh, this is a, a contrived 493 00:33:39,855 --> 00:33:42,035 example, but it will tell you where 494 00:33:42,795 --> 00:33:46,395 the duplication happened. It'll give you, uh, it'll tell you, this was previously 495 00:33:46,395 --> 00:33:50,375 declared somewhere else, rather than just saying that it has already been declared. 496 00:33:50,375 --> 00:33:55,835 So, uh, the ini setting default value is to show fatal error backtraces, meaning it 497 00:33:55,835 --> 00:33:59,055 is enabled by default. But if for some reason you wanna turn it off, you can set 498 00:33:59,055 --> 00:34:04,235 that setting to 0 and you'll get back the current state of affairs. Uh, we have 499 00:34:04,235 --> 00:34:08,535 links to this and all of the PHP 8.5 updates in the show notes for you. 500 00:34:09,415 --> 00:34:14,775 Okay. Moving on to packages. So this first one, I was confused when I read it for 501 00:34:14,775 --> 00:34:18,075 the first time because it says Volt in the title. 502 00:34:18,075 --> 00:34:20,815 -Mm-hmm. -Laravel performance testing with volt test 503 00:34:20,815 --> 00:34:26,175 PHP. Now if you were naive like me and you think, oh, Laravel Volt, which was 504 00:34:26,175 --> 00:34:32,135 introduced at, I think, like, Laracon 2023 US, I think, is where it was at? Um... 505 00:34:32,135 --> 00:34:33,535 -It's been around a while. Yeah. -Somebody talked about this, right? Which 506 00:34:33,535 --> 00:34:37,475 is, like, um, these, like, LiveWire components and, like, single, single file 507 00:34:37,475 --> 00:34:40,855 component things. Not what we're talking about. No need to really continue down 508 00:34:40,855 --> 00:34:46,635 that path. This is talking about volt test PHP, which, uh, if I'm reading its, in 509 00:34:46,635 --> 00:34:51,615 its own title of what it claims to do, it empowers developers to write and execute 510 00:34:51,615 --> 00:34:57,695 performance, load, and stress tests for their applications directly inside of PHP. 511 00:34:57,695 --> 00:35:02,815 So what the Laravel performance testing package does is this allows you to 512 00:35:03,935 --> 00:35:10,515 use the volt test PHP SDK to create these load tests for your Laravel applications, 513 00:35:10,515 --> 00:35:14,495 uh, which some of the niceties that it sort of folds in here is things like route 514 00:35:14,495 --> 00:35:21,215 discovery, CSRF handling, reporting, and more. So using the Laravel package, uh, 515 00:35:21,215 --> 00:35:24,515 that we're talking about here, you can quickly get up to speed using that volt 516 00:35:24,515 --> 00:35:29,015 test, generating test files easily, and starting to stress test your Laravel app 517 00:35:29,015 --> 00:35:33,195 if that is in fact something you need to do. The API looks really nice. You 518 00:35:33,195 --> 00:35:38,355 basically set up a scenario and you set up different steps that you'd like to test, 519 00:35:38,355 --> 00:35:43,235 and then you can, uh, build it all out s- very... In, in a fluent interface, uh, 520 00:35:43,235 --> 00:35:47,684 very similar to how you'd build out... uh, what you would do when inside of a PHP 521 00:35:47,684 --> 00:35:51,964 unit sort of request life cycle. Here are the things I want you to do, and then you 522 00:35:51,964 --> 00:35:56,583 can go through, filter it out only to particular, uh, tests that you want to 523 00:35:56,583 --> 00:36:01,623 run, and then do your stress test there with PHP Artisan Volt Test and run that 524 00:36:01,623 --> 00:36:07,043 there. So it's easily, uh, configurable, automatic route discovery, comprehensive 525 00:36:07,043 --> 00:36:12,443 reporting, URL load testing. It comes with artisan commands, configurable, uh, 526 00:36:12,443 --> 00:36:18,324 through flexible config options, and then it also has things like CSV data sources, 527 00:36:18,324 --> 00:36:21,024 which you might think is, like, "W- why would I need to do that for?" Well, if 528 00:36:21,024 --> 00:36:24,763 you're wanting to load a bunch of different data into these stress tests, 529 00:36:24,763 --> 00:36:29,123 it's gonna require a large amount of it to kind of run through for realistic 530 00:36:29,123 --> 00:36:32,263 performance testing. And so, a lot of times you're going to load that in through 531 00:36:32,263 --> 00:36:37,283 some sort of CSV data source. It supports that. So you can check this one out in 532 00:36:37,283 --> 00:36:38,004 the show notes. 533 00:36:40,043 --> 00:36:45,743 Intelligent parsing and formatting of names in PHP apps. Uh, if you have ever 534 00:36:45,743 --> 00:36:51,243 done anything that deals with a customer, you know, like a CRM type thing or 535 00:36:51,243 --> 00:36:54,643 anywhere where you're displaying names of people, where it can be arbitrarily 536 00:36:54,643 --> 00:36:59,764 entered into forms, Name of Person is a PHP package inspired by Basecamp's Name of 537 00:36:59,764 --> 00:37:03,403 Person Ruby Gem, which gives you intelligent parsing and multiple 538 00:37:03,403 --> 00:37:04,584 formatting options. 539 00:37:05,344 --> 00:37:09,243 If you handle, uh, sorry, handle person names in your PHP applications with 540 00:37:09,243 --> 00:37:13,143 elegant formatting options, transform names between multiple presentation 541 00:37:13,143 --> 00:37:17,664 formats, the package provides a clean type safe way to parse, store, manipulate, and 542 00:37:17,664 --> 00:37:22,303 display person names consistently across your application. So you can directly 543 00:37:22,303 --> 00:37:26,864 instantiate a person name with a first and last name as separate parameters, or you 544 00:37:26,864 --> 00:37:32,524 can use static constructors for, uh, you know, person name from full, and then you 545 00:37:32,524 --> 00:37:37,364 can, from the parsed object, return the first and the last name. It handles single 546 00:37:37,364 --> 00:37:39,463 names as well. So if you had, say, "prince," 547 00:37:40,103 --> 00:37:45,923 uh, you would get null back for the last name. The package also has Laravel support 548 00:37:45,923 --> 00:37:49,243 for cars that you can use with your models, and the car support string based 549 00:37:49,243 --> 00:37:53,263 cars configurations, as well as a fluent method and JSON serialization. 550 00:37:54,243 --> 00:37:57,443 Multiple format options are available. There are nine different ways to display 551 00:37:57,443 --> 00:38:01,483 names. There is full, familiar, abbreviated, initials, sorted, possessive, 552 00:38:01,483 --> 00:38:05,403 and mentionable. There is smart parsing to intelligently handle full name strings 553 00:38:05,403 --> 00:38:08,223 and edge cases. There is full international name support with proper 554 00:38:08,223 --> 00:38:12,803 multi-byte handling. Core functionality means it works in any PHP project, and a 555 00:38:12,803 --> 00:38:17,963 specific viral integration provides native eloquent casting for seamless database 556 00:38:17,963 --> 00:38:22,923 integration. So he talks about, um, you know, familiar and initials and, uh, 557 00:38:22,923 --> 00:38:29,263 possessive formatting options. So if you had, um, Eric L. Barnes, as he likes to 558 00:38:29,263 --> 00:38:32,863 sh- pla- place his name around the internet. If you said that was his name, 559 00:38:32,863 --> 00:38:38,683 then familiar would be Eric B., um, you know, with a, with a sh- Initial for the 560 00:38:38,683 --> 00:38:43,523 surname. Uh, initials, you could say name initials to get E-L-B, to get the initials 561 00:38:43,523 --> 00:38:48,223 of all of the names. Possessive for the first name, so Eric's, Eric apostrophe S, 562 00:38:48,223 --> 00:38:51,683 and so on and so forth. Uh, this is useful, you know, if you're 563 00:38:52,343 --> 00:38:54,703 sending emails to people, you might wanna address them in a- 564 00:38:54,703 --> 00:38:56,983 -Hmm. Good point -... e- with a possessive. You might want 565 00:38:56,983 --> 00:39:02,483 to, um, generate avatars if they haven't uploaded an image with, with the initials 566 00:39:02,483 --> 00:39:06,823 for their name and so on and so forth. So definitely check this one out. Uh, 567 00:39:06,823 --> 00:39:07,343 something that 568 00:39:08,023 --> 00:39:12,183 we do in a number of different places, I'm sure there are many of you listening who 569 00:39:12,183 --> 00:39:16,483 have implemented these in various different ways. Um, I know a favorite of 570 00:39:16,483 --> 00:39:20,583 mine to get the first and last name is to do, like, string of before space, and 571 00:39:20,583 --> 00:39:21,463 -that's the first name- -Yeah 572 00:39:21,463 --> 00:39:26,823 ... and string, string of after, you know, that space means it's the last name. And 573 00:39:26,823 --> 00:39:30,463 you can get caught out in places if people have put in, like, a middle name or, or 574 00:39:30,463 --> 00:39:31,603 things like that as well. But 575 00:39:32,963 --> 00:39:38,843 a tested package that's built on top of or off the, the work of Basecamp's Ruby Gem 576 00:39:38,843 --> 00:39:39,343 means that 577 00:39:39,983 --> 00:39:44,143 it's comprehensive. It's tested over a, a long, long period of time. So definitely 578 00:39:44,143 --> 00:39:44,963 check that one out. 579 00:39:45,983 --> 00:39:46,503 Awesome. 580 00:39:47,203 --> 00:39:52,723 Uh, last package before we get to to... To these tutorials here. Uh, Laravel AI Chat 581 00:39:52,723 --> 00:39:58,523 Starter Kit created by Pushpack Chahed is a modern starter kit that features real 582 00:39:58,523 --> 00:40:04,523 time streaming responses using Prism, Inertia, Vue, and Tailwind CSS. Okay. 583 00:40:04,523 --> 00:40:08,023 Don't sleep on this thing. Let me, let me kind of put this down for you here. 584 00:40:08,823 --> 00:40:14,163 If you are wanting to interact with an AI model and you also are responsible perf- 585 00:40:14,163 --> 00:40:17,503 for, for providing the interface that allows you to interact with that model, as 586 00:40:17,503 --> 00:40:22,523 well as stream back the responses, this is a starter kit for Laravel that gives 587 00:40:22,523 --> 00:40:27,003 you everything you need to get up and running with that from zero really 588 00:40:27,003 --> 00:40:27,403 quickly. 589 00:40:28,043 --> 00:40:32,323 As I said, it's a starter kit. So as of Laravel 12, we now have these starter kits 590 00:40:32,323 --> 00:40:36,323 that you can ship things with. So to get started with this, all you do is Laravel 591 00:40:36,323 --> 00:40:43,323 new, and then you use PUSHPACK1300/AICHAT. That's it. And it will give you all of 592 00:40:43,323 --> 00:40:47,623 this ready to go. Real time AI responses, which are streamed as they're generated. 593 00:40:48,283 --> 00:40:51,523 Reasoning support, so it has support for AI models with reasoning capabilities. I- 594 00:40:51,523 --> 00:40:56,063 it allows for multiple AI providers. Thank you, Prism. AI, OpenAI, Anthropic, 595 00:40:56,063 --> 00:41:00,823 Gemini, Ollama, Grok, et cetera. All those things. It has a built in authentication 596 00:41:00,823 --> 00:41:03,943 system for user authentication and management. It has a light and a dark 597 00:41:03,943 --> 00:41:09,003 mode. It has custom theming with ShadCN. So if you've not used Sha- ShadCN before, 598 00:41:09,003 --> 00:41:12,103 uh, you know, this is something that's usually... It was kind of created 599 00:41:12,103 --> 00:41:16,223 originally for React, but it's been ported over to Vue. So now you can do easy theme 600 00:41:16,223 --> 00:41:21,043 customization with just simple CSS variables. Really nice there. And then 601 00:41:21,043 --> 00:41:25,803 also allows you to do chat sharing, which is, uh, allowing you to share 602 00:41:25,803 --> 00:41:29,843 conversations with other users. This is something that ChatGPT has done in the not 603 00:41:29,843 --> 00:41:33,687 too, um...... re- you know, not too distant past, which has been really 604 00:41:33,687 --> 00:41:36,647 helpful for myself. Specifically, I'll- I'll write something up, wanna share it 605 00:41:36,647 --> 00:41:39,547 with my wife. I either have to copy and paste this whole conversation or I can 606 00:41:39,547 --> 00:41:42,247 say, "Just share this over to this person," and it kinda gives them the 607 00:41:42,247 --> 00:41:47,648 entire context. So a really, really comprehensive starter kit here, as well as 608 00:41:47,648 --> 00:41:54,468 shipping with an enum that specifies the model names that you'd like to use. So, 609 00:41:54,468 --> 00:42:01,368 you know, you've got GPT-4-0-mini- mini, and GPT-41-nano, and 04-mini. And 610 00:42:01,368 --> 00:42:04,667 if you didn't know the names of these or how they're specifically... It's sort of 611 00:42:04,667 --> 00:42:09,567 like when you're doing regions for Amazon. It's like, was it US, ES- US East 1 or 612 00:42:09,567 --> 00:42:13,448 East 2, or which one was it? This just kinda simplifies that for you by providing 613 00:42:13,448 --> 00:42:18,308 an enum that has all those values ready for you to go to plug in. So if this is 614 00:42:18,308 --> 00:42:21,727 something you've needed to do, even if you just wanted to play around with Prism, 615 00:42:21,727 --> 00:42:26,448 this is a great spot for you to just grab the starter kit, spin it up, and give it a 616 00:42:26,448 --> 00:42:31,847 try. So really, really cool here. Thanks to Pushpack and Chahajed for, uh, creating 617 00:42:31,847 --> 00:42:32,847 that. Very nice. 618 00:42:33,808 --> 00:42:38,707 Nice. Uh, several tutorials this week, all of them from our favorite, Harris 619 00:42:38,707 --> 00:42:41,927 Raftopoulos. All of them framework reminders, if I have classified them 620 00:42:41,927 --> 00:42:46,807 correctly. I'm gonna run through them all and leave them to you, dear listener, to 621 00:42:46,807 --> 00:42:51,288 go forward and read them. First up, simplifying stream handling with Laravel's 622 00:42:51,288 --> 00:42:56,127 resource method. We've got dependency injection in Laravel closure commands, 623 00:42:56,127 --> 00:43:01,907 Laravel's inarrayKeys rule allowing you to validate partial array keys, content 624 00:43:01,907 --> 00:43:06,627 negotiation with Laravel's prefers method. There is Laravel request content type 625 00:43:06,627 --> 00:43:11,687 inspection methods, as well as blade authorization directives for Vue security, 626 00:43:11,687 --> 00:43:16,987 enhancing JSON responses with Laravel's modelappends property, enhanced Enum 627 00:43:16,987 --> 00:43:21,487 processing with Laravel's default parameter support, custom object casting 628 00:43:21,487 --> 00:43:26,947 in Laravel models, and Laravel's ruleContains method for fluent array 629 00:43:26,947 --> 00:43:30,527 validation. All of these things that we have spoken about at various points in 630 00:43:30,527 --> 00:43:35,287 time on Laravel News, and Harris, as always, has helpfully gone through and 631 00:43:35,287 --> 00:43:39,307 just expanded on the high-level stuff that we talk about on the show to give you 632 00:43:39,307 --> 00:43:43,947 more context around how you might use some of this functionality in your projects. 633 00:43:45,047 --> 00:43:50,207 Yep. They are actually so well-written, and he does a really good job breaking 634 00:43:50,207 --> 00:43:52,987 down the high-level things that we're talking about. When we're talking about 635 00:43:52,987 --> 00:43:56,227 release things, a lot of times it's just the bullet point version. 636 00:43:56,227 --> 00:43:58,667 -Mm-hmm. -Here's the feature, top level. And maybe 637 00:43:58,667 --> 00:44:01,927 you don't have as much of a grasp on, "How exactly do I use this inside my 638 00:44:01,927 --> 00:44:05,447 application?" Or, "What are some examples of places where I might use this?" He 639 00:44:05,447 --> 00:44:09,807 takes all those and expands them to a full tutorial and provides, uh, details on all 640 00:44:09,807 --> 00:44:13,867 of that. Really well-written, really easy to follow, and most of them you could 641 00:44:13,867 --> 00:44:18,107 read through and understand within, I'm talking five minutes, right? You should 642 00:44:18,107 --> 00:44:21,047 definitely go through these, read these on a lunch break. It's gonna be really 643 00:44:21,047 --> 00:44:25,547 helpful. And there's so much stuff that's going into the framework these days, it's 644 00:44:25,547 --> 00:44:29,687 easy to lose that there's some of these amazing things that you have never even 645 00:44:29,687 --> 00:44:32,787 heard of, right? Even if you read through the documentation, you might not know that 646 00:44:32,787 --> 00:44:36,507 these things exist. So definitely check these tutorials out. They're super val- 647 00:44:36,507 --> 00:44:40,307 super valuable and are gonna help you level up to the next 648 00:44:41,087 --> 00:44:42,847 level. And also, speaking of, 649 00:44:43,487 --> 00:44:46,987 if you're interested in leveling up to the next level and you are over on the side 650 00:44:46,987 --> 00:44:50,907 of the world, uh, where Australia is near you, you should definitely be grabbing 651 00:44:50,907 --> 00:44:54,327 your tickets to Laracon AU. Michael, give us some dates that we should be looking 652 00:44:54,327 --> 00:44:58,147 -at. -Yeah. November 13th and 14th in Brisbane 653 00:44:58,147 --> 00:45:04,287 this year. Um, we have sold over half of our early bird allocation as well, uh, and 654 00:45:04,287 --> 00:45:08,467 that will run until the 7th of August unless sold out earlier. So if, uh, if 655 00:45:08,467 --> 00:45:13,467 you've missed the boat on Laracon US, then, uh, Laracon AU is happy for you to 656 00:45:13,467 --> 00:45:17,867 join us. If you go to Laracon US and you think you want some more Laracon in your 657 00:45:17,867 --> 00:45:21,667 life, there will still be about a week to grab your early bird tickets after that 658 00:45:21,667 --> 00:45:26,767 happens. So I'd love to see you there. And, uh, we're- we're in the thick of 659 00:45:26,767 --> 00:45:31,147 announcing speakers at the moment as well. So looking forward to getting all those. 660 00:45:31,147 --> 00:45:35,267 It's one less secret I need to keep from the community , so definitely enjoying 661 00:45:35,267 --> 00:45:38,667 this part of, uh, the preparation process, for sure. 662 00:45:39,347 --> 00:45:43,527 Absolutely. Hey, folks. Michael and myself will also be at Laracon US this year, 663 00:45:43,527 --> 00:45:48,267 which is coming up right around the corner. I think both of us will be there 664 00:45:48,267 --> 00:45:50,327 on the... Ooh, let's see. 665 00:45:51,527 --> 00:45:54,307 -28th. -28th? Yes, we'll both be on the 28th. I'll 666 00:45:54,307 --> 00:45:58,727 be there through the 31st. Please say hello. We would love to see you and hear 667 00:45:58,727 --> 00:46:02,527 from you. It's always great to, uh, hear from people who are able to listen to the 668 00:46:02,527 --> 00:46:06,267 show, and very much looking forward to catching up with all you lovely folks 669 00:46:06,267 --> 00:46:09,407 there. This has been episode 241. You can find show notes for it at 670 00:46:09,407 --> 00:46:14,867 podcast.laravel-news.com/241. Please rate us up in your podcatcher of choice. Five 671 00:46:14,867 --> 00:46:17,747 stars would be amazing if you enjoyed the show. And of course, any comments or 672 00:46:17,747 --> 00:46:21,727 questions you might have, hit us up on BlueSky or on X @MichaelDerenda, 673 00:46:21,727 --> 00:46:26,127 @JacobBennett, or @Laravel News. Folks, until next time, it's been a fun one. We 674 00:46:26,127 --> 00:46:26,787 will see ya. 675 00:46:27,567 --> 00:46:27,907 Bye.

Never lose your place, on any device

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