Wes's Avatar

Wes

@jwhulette

Programmer, #PHP, Laravel and a Miami Dolphins fan. Married with a bunch of beautiful daughters and a beautiful wife.

253
Followers
251
Following
116
Posts
18.11.2024
Joined
Posts Following

Latest posts by Wes @jwhulette

A search interface on a website displays results related to Laravel packages, including titles, dates, and tags for various articles.

A search interface on a website displays results related to Laravel packages, including titles, dates, and tags for various articles.

Post image

I've updated the search on my blog to use the new major version of our spatie/laravel-site-search package (which can crawl a site and index all content)

I'll talk more about the package soon!

04.03.2026 10:48 πŸ‘ 4 πŸ” 1 πŸ’¬ 1 πŸ“Œ 0
Preview
The candy heir vs. chocolate skimpflation The grandson of the Reese's Peanut Butter Cups creator has launched a campaign against The Hershey Company, which owns the Reese's brand. He wants them to stop skimping on ingredients.

The grandson of the Reese's Peanut Butter Cups creator has launched a campaign against The Hershey Company, which owns the Reese's brand. He wants them to stop skimping on ingredients. n.pr/3N2lYUx

03.03.2026 11:51 πŸ‘ 711 πŸ” 111 πŸ’¬ 34 πŸ“Œ 33

I still can’t give up iTerm

03.03.2026 11:27 πŸ‘ 1 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Preview
Introduction | laravel-query-builder laravel-query-builder

πŸ“¦ Here's a link to our query builder package that @taylorotwell just mentioned at @LaraconEU
spatie.be/docs/larave...

02.03.2026 16:21 πŸ‘ 7 πŸ” 1 πŸ’¬ 0 πŸ“Œ 0
Post image

If you use Laravel Valet and Safari feels slow on .test domains, the fix is simple.

Safari tries IPv6 first, times out, then falls back to IPv4. Just tell dnsmasq to also resolve .test to the IPv6 loopback address and restart it.

Hat tip to my colleague Ruben for this one.

27.02.2026 11:48 πŸ‘ 13 πŸ” 1 πŸ’¬ 0 πŸ“Œ 0
Laravel 12.51: Stop Wasting Resources with Lazy firstOrCreate & MySQL Query Timeouts
Laravel 12.51: Stop Wasting Resources with Lazy firstOrCreate & MySQL Query Timeouts YouTube video by Laravel

πŸ“Ί Here is What's New in Laravel 12.51

➑️ Closures in firstOrCreate / createOrFirst
➑️ Query timeout for MySQL
➑️ whenFails / whenPasses on Validator

Thank you Guillermo, Vladelis & Gunther πŸ™

youtu.be/-0DkMlv1HlM

26.02.2026 18:33 πŸ‘ 4 πŸ” 1 πŸ’¬ 0 πŸ“Œ 0
Preview
Donate to Support She Got Game: Celebrate Female Athletes, organized by Flavor Flav Flavor Flav, the legendary rapper and Hollywood personality, has long been… Flavor Flav needs your support for Support She Got Game: Celebrate Female Athletes

Many of y’all asked how you can support and donate to our female athletes and the celebrations,,, so I created a Go Fund Me. I’m hopeful this can have an impact beyond the weekend and help those that represent the best of the US

gofund.me/140322128

26.02.2026 18:39 πŸ‘ 4749 πŸ” 1424 πŸ’¬ 81 πŸ“Œ 87
The Fate of Melania - A Randy Rainbow Song Parody
The Fate of Melania - A Randy Rainbow Song Parody YouTube video by Randy Rainbow

The Fate of Melania (Randy’s Version) 🧑🎻

26.02.2026 15:19 πŸ‘ 614 πŸ” 208 πŸ’¬ 40 πŸ“Œ 46
Post image

πŸš€ We just released laravel-og-image, a package that generates Open Graph images right inside your Laravel app.

Define your OG image as a Blade component, and the package screenshots it and serves it to crawlers. No external API, everything runs on your server.

26.02.2026 12:02 πŸ‘ 8 πŸ” 2 πŸ’¬ 1 πŸ“Œ 0
A group of people at a happy hour with the Larabelles and Geocodio logos

A group of people at a happy hour with the Larabelles and Geocodio logos

Calling all cis women, trans women, and non-binary folks going to Laracon EU!

We're sponsoring a Larabelles happy hour on Monday and would love if you can join us.

RSVP ➑️ luma.com/61sdhh28

(Laravel world men: appreciate you helping raise awareness and sharing this 😊)

26.02.2026 10:00 πŸ‘ 11 πŸ” 8 πŸ’¬ 0 πŸ“Œ 1
Preview
CVE-2026-27593 - GitHub Advisory Database Statamic is vulnerable to account takeover via password reset link injection

PSA for @statamic.com folks - update your sites ASAP! ⚠️

A CRITICAL vuln was discovered that allows full account takeover via password resets! 😱

All the details: cvereports.com/reports/CVE-...

25.02.2026 00:36 πŸ‘ 9 πŸ” 6 πŸ’¬ 0 πŸ“Œ 0
Video thumbnail

Letz go even bigger and better,,, ALL Female US Olympians and Paralympian medalists are invited out to celebrate in Viva Las Vegas for the SHE GOT GAME Weekend ,,,

Hit a guy up and LETZ GOOO

25.02.2026 01:58 πŸ‘ 26762 πŸ” 4852 πŸ’¬ 728 πŸ“Œ 695
Email to USA Hockey

Email to USA Hockey

Formal invitation to the hockey team sent,,, if any people with connections to the hockey team wanna have them email my team my bio. I’m for real. πŸ‘πŸΎπŸ‘πŸΎπŸ‘πŸΎ

23.02.2026 21:59 πŸ‘ 18925 πŸ” 3109 πŸ’¬ 543 πŸ“Œ 554
Code snippet comparing native PHP reflection (5 lines) with a simplified approach using the spatie/php-attribute-reader package (1 line).

Code snippet comparing native PHP reflection (5 lines) with a simplified approach using the spatie/php-attribute-reader package (1 line).

πŸš€ We just released spatie/php-attribute-reader, a package that gives you a clean API for reading PHP attributes.

PHPs reflection API for attributes is surprisingly verbose. Our package fixes that. πŸ‘

#php

23.02.2026 11:53 πŸ‘ 9 πŸ” 2 πŸ’¬ 1 πŸ“Œ 0
A clean API for reading PHP attributes PHP 8.0 introduced attributes, and they're a great way to add structured metadata to classes, methods, properties, constants, and parameters. The concept is solid, but the reflection API you need to actually read them is surprisingly verbose. What should be a simple one-liner ends up being multiple lines of boilerplate every time. And if you want to find all usages of an attribute across an entire class, you're looking at deeply nested loops. We just released [spatie/php-attribute-reader](https://github.com/spatie/php-attribute-reader), a package that gives you a clean, static API for all of that. Let me walk you through what it can do. <!--more--> ## Using attribute reader Imagine you have a controller with a `Route` attribute and you want to get the attribute instance. With native PHP, that looks like this: ```php $reflection = new ReflectionClass(MyController::class); $attributes = $reflection->getAttributes(Route::class, ReflectionAttribute::IS_INSTANCEOF); $route = null; if (count($attributes) > 0) { $route = $attributes[0]->newInstance(); } ``` Five lines, and you still need to handle the case where the attribute isn't there. With the package, it becomes: ```php use Spatie\Attributes\Attributes; $route = Attributes::get(MyController::class, Route::class); ``` One line. Returns `null` if the attribute isn't present, no exception handling needed. It gets worse with native reflection when you want to read attributes from a method. Say you want the `Route` attribute from a controller's `index` method: ```php $reflection = new ReflectionMethod(MyController::class, 'index'); $attributes = $reflection->getAttributes(Route::class, ReflectionAttribute::IS_INSTANCEOF); $route = null; if (count($attributes) > 0) { $route = $attributes[0]->newInstance(); } ``` Same boilerplate, different reflection class. The package handles all targets with dedicated methods: ```php Attributes::onMethod(MyController::class, 'index', Route::class); Attributes::onProperty(User::class, 'email', Column::class); Attributes::onConstant(Status::class, 'ACTIVE', Label::class); Attributes::onParameter(MyController::class, 'show', 'id', FromRoute::class); ``` Where things really get gnarly with native reflection is when you want to find every occurrence of an attribute across an entire class. Think about a form class where multiple properties have a `Validate` attribute. With plain PHP, you'd need something like: ```php $results = []; $class = new ReflectionClass(MyForm::class); foreach ($class->getProperties() as $property) { foreach ($property->getAttributes(Validate::class, ReflectionAttribute::IS_INSTANCEOF) as $attr) { $results[] = ['attribute' => $attr->newInstance(), 'target' => $property]; } } foreach ($class->getMethods() as $method) { foreach ($method->getAttributes(Validate::class, ReflectionAttribute::IS_INSTANCEOF) as $attr) { $results[] = ['attribute' => $attr->newInstance(), 'target' => $method]; } foreach ($method->getParameters() as $parameter) { foreach ($parameter->getAttributes(Validate::class, ReflectionAttribute::IS_INSTANCEOF) as $attr) { $results[] = ['attribute' => $attr->newInstance(), 'target' => $parameter]; } } } foreach ($class->getReflectionConstants() as $constant) { foreach ($constant->getAttributes(Validate::class, ReflectionAttribute::IS_INSTANCEOF) as $attr) { $results[] = ['attribute' => $attr->newInstance(), 'target' => $constant]; } } ``` That's a lot of code for a pretty common operation. With the package, it collapses to: ```php $results = Attributes::find(MyForm::class, Validate::class); foreach ($results as $result) { $result->attribute; // The instantiated attribute $result->target; // The Reflection object $result->name; // e.g. 'email', 'handle.request' } ``` All attributes come back as instantiated objects, child classes are matched automatically via `IS_INSTANCEOF`, and missing targets return `null` instead of throwing. ## In closing We're already using this package in several of our other packages, including [laravel-responsecache](https://github.com/spatie/laravel-responsecache), [laravel-event-sourcing](https://github.com/spatie/laravel-event-sourcing), and [laravel-markdown](https://github.com/spatie/laravel-markdown). It cleans up a lot of the attribute-reading boilerplate that had accumulated in those codebases. You can find the full documentation [on our docs site](https://spatie.be/docs/php-attribute-reader/v1/introduction) and the source code [on GitHub](https://github.com/spatie/php-attribute-reader). This is one of the many packages we've created. If you want to support our open source work, consider picking up [one of our paid products](https://spatie.be/open-source/support-us).

πŸ”— A clean API for reading PHP attributes
#php #package #spatie #PHP

23.02.2026 07:42 πŸ‘ 5 πŸ” 2 πŸ’¬ 0 πŸ“Œ 0
Preview
Laravel 13: Full Review – What’s New & What Changed! YouTube video by nunomaduro

tomorrow: what's new in laravel 13.. turn on notifications here: www.youtube.com/live/-PNYsJM...

22.02.2026 12:06 πŸ‘ 7 πŸ” 2 πŸ’¬ 0 πŸ“Œ 0

πŸ“¦ Can you believe we'll ship yet another new package? It's coming later today, stay tuned πŸ™‚ #php #laravel

19.02.2026 12:44 πŸ‘ 7 πŸ” 1 πŸ’¬ 0 πŸ“Œ 0

I'm seeing more people use X's article feature to share content.

I really wouldn't do that. Sure, they'll probably give you more exposure in the short term, but in the long term you want to stay the owner of your own content.

Start your own blog if you want to share things πŸ™‚

19.02.2026 16:03 πŸ‘ 17 πŸ” 3 πŸ’¬ 1 πŸ“Œ 0

Any political party spreading lies about voter fraud as a pretext to make it harder for every one to vote is sending a clear message: they can't win on their ideas alone.

Remember this.

18.02.2026 18:46 πŸ‘ 14193 πŸ” 4373 πŸ’¬ 324 πŸ“Œ 169
A GitHub pull request shows the merge of Laravel 13 compatibility into the spatie_be package, detailing commits and comments.

A GitHub pull request shows the merge of Laravel 13 compatibility into the spatie_be package, detailing commits and comments.

πŸ™Œ The first PR that adds Laravel 13 compatibility to a @spatie_be package has been merged! #laravel #php

19.02.2026 10:27 πŸ‘ 4 πŸ” 1 πŸ’¬ 1 πŸ“Œ 0
Video thumbnail

What is New in Laravel 12.52 ✌️

(AI Experiment)

17.02.2026 21:15 πŸ‘ 4 πŸ” 1 πŸ’¬ 0 πŸ“Œ 0
Laravel AI SDK: I Built a D&D Terminal Game with AI as Dungeon Master
Laravel AI SDK: I Built a D&D Terminal Game with AI as Dungeon Master YouTube video by Laravel

What if your terminal was a dungeon?

I built a D&D escape game with the new Laravel AI SDK. The AI is the Dungeon Master. You are the artisan.

You will probably die.... βš”οΈ

www.youtube.com/watch?v=dYuF...

12.02.2026 20:20 πŸ‘ 2 πŸ” 1 πŸ’¬ 0 πŸ“Œ 0

Need to get the teams here

12.02.2026 21:00 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Preview
Release v1.11.2 · php/frankenphp ⚠️ Security Update: This release addresses three security vulnerabilities, including a critical path confusion issue allowing arbitrary file execution and a session leak in worker mode. Immediate u...

FrankenPHP v1.11.2 is out! πŸ§ŸπŸš€

Upgrade immediately! πŸ‘‡ github.com/php/frankenp...

#PHP #FrankenPHP #golang #WebAssembly #Security

12.02.2026 12:34 πŸ‘ 18 πŸ” 7 πŸ’¬ 1 πŸ“Œ 0

Because someday I might review it and ding you for not having earlier returns LOL

09.02.2026 16:48 πŸ‘ 2 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

That is a nightmare waiting to happen

06.02.2026 11:28 πŸ‘ 1 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Preview
πŸ”ΆπŸ”Ά Laravel AI SDK just dropped YouTube video by nunomaduro

Live right now, exploring taylor’s new Laravel AI SDK.. πŸ”Ά

Join me: www.youtube.com/live/nvhdOUi...

05.02.2026 17:53 πŸ‘ 4 πŸ” 1 πŸ’¬ 0 πŸ“Œ 0
What's New in Laravel 12.49: hasSole(), Subquery Ranges & Searchable Tables
What's New in Laravel 12.49: hasSole(), Subquery Ranges & Searchable Tables YouTube video by Laravel

New Laravel 12.49 video 🎬

Lets discover new features like:

➑️ hasSole() for collections
➑️ whereBetweenColumns() with subqueries
➑️ db:table searchable prompt

Lets go ✌️
youtu.be/3iL51liqYiw

05.02.2026 20:09 πŸ‘ 4 πŸ” 1 πŸ’¬ 1 πŸ“Œ 0
Preview
Laracon 2026 The flagship Laravel conference.

Laracon US 2026 tickets are live!

πŸ“Boston, MA
πŸ—“οΈJuly 28–29, 2026

Join 1,000+ Web Artisans for two days of learning, shipping, and community.

Claim your ticket β†’ laracon.us

02.02.2026 20:53 πŸ‘ 12 πŸ” 6 πŸ’¬ 1 πŸ“Œ 0
Stop Letting AI Write Your Tests
Stop Letting AI Write Your Tests YouTube video by Laravel

Coding with AI is easy now. Tests, implementation, all of it.

But let AI write your tests too? You lose control fast.

There's a better way β€” and it's not new.

youtu.be/sOcLzT3o3Is

30.01.2026 16:06 πŸ‘ 6 πŸ” 1 πŸ’¬ 0 πŸ“Œ 1