Laravel 12 quietly introduced a game-changing upgrade for form validation: the :ordinal-position placeholder. While it may seem minor, this enhancement dramatically improves how array-based validation errors are communicated to end users.
đźš« The Problem with Traditional Array Errors
When validating arrays, Laravel typically returns messages like:
cart_items.1.quantity is required
To developers, this makes sense. But to users? It’s cryptic, technical, and confusing. What does “1” mean? Which item is missing a quantity?
âś… The UX-Friendly Solution
Laravel 12.30 now supports :ordinal-position, which transforms that same error into:
The quantity (at 2nd position) is required
This small shift makes a big difference. It’s readable, intuitive, and helps users correct their input without feeling lost.
đź”§ How to Use It
In your validation messages, simply swap :index with :ordinal-position. For example:
'cart_items.*.quantity' => 'The quantity (at :ordinal-position position) is required.'
Laravel will automatically convert the index to a human-friendly ordinal like “1st”, “2nd”, “3rd”, etc.
đź§Ş Bonus: Test It with Pest or PHPUnit
Make sure your validation logic reflects this upgrade in your tests. Here’s a quick Pest snippet:
it('shows ordinal position in error message', function () {
$response = $this->post('/checkout', [
'cart_items' => [
['quantity' => ''],
],
]);
$response->assertSessionHasErrors([
'cart_items.0.quantity' => 'The quantity (at 1st position) is required.',
]);
});
🎯 Why It Matters
- Improves clarity for non-technical users
- Reduces support tickets and form abandonment
- Shows Laravel’s commitment to thoughtful UX
Upgrade and configure in minutes for cleaner errors.
Laravel’s :ordinal-position is a small win with big impact — and it’s already making validation smarter for everyone.
Fuel my creative spark with a virtual coffee! Your support keeps the ideas percolating—grab me a cup at Buy Me a Coffee and let’s keep the magic brewing!
