Back to Blog

Laravel 10.33 Released

Julian Beaujardin
Julian Beaujardin November 26th, 2023

This week, the Laravel team released v10.33, with new number helper methods, test assertions about batches that exist in a job chain, a hex color validation rule, and more. Here is a bit more info about the new features introduced this week:

Number utility class

Caen De Silva contributed the Laravel Number Utility Class, which simplifies most number formatting needs. The number helper lives in the Illuminate\Support package, giving you several new helpers. Here are a few examples:

Number::format(25) // 25
Number::format(100000) // 100,000
Number::format(123456789) // 123,456,789

Number::format(123456789, locale: 'en') // 123,456,789
Number::format(123456789, locale: 'de') // 123.456.789
Number::format(123456789, locale: 'sv') // 123 456 789

Number::percentage(25) // 25%
Number::percentage((1/3) * 100, precision: 2) // 33.33%

See our post on the Laravel Number Utility Class to learn about the newest Laravel helper.

Make assertions about batches that exist in job chains

Taylor Otwell contributed improvements to the testability of batches that exist in a chain via a new Bus::chainedBatch testing helper. Here's an example of how this works taken from Pull Request #49003:

// Route
Route::get('/batch', function () {
    Bus::chain([
        new TestJob,
        Bus::batch([
            new TestJob,
        ]),
        new TestJob,
    ])->dispatch();
});

// Test
Bus::fake();

$response = $this->get('/batch');
$response->assertSuccessful();

Bus::assertChained([
    new TestJob,
    Bus::chainedBatch(function ($batch) {
        return $batch->jobs->count() === 1;
    }),
    new TestJob,
]);

See the new Testing Job Chains documentation for more details.

Pass the $validator as a parameter to closure-based rules

@shinsente contributed by adding the validator instance to as an argument in closure-based validation rules:

use Closure;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\LazyCollection;
use Illuminate\Validation\Validator as ValidationValidator;

$rules = [
    'price' => [
        function (string $attribute, mixed $value, Closure $fail, ValidationValidator $validator) {
            if (!price_logic($value, $validator->attributes()['payment_country'] ?? null)) {
                $fail("The {$attribute} is invalid.");
            }
        },
    ],
];

Add color_hex validation rule

Niko Peikrishvili contributed a hex_color validation rule in which the field under validation must contain a valid color value in hexadecimal:

$v = Validator::make(['color' => '#fff'], ['color' => 'hex_color']);
$v->passes(); // true

$v = Validator::make(['color' => '#ggg'], ['color' => 'hex_color']);
$v->passes(); // false

Andy Hinkle also contributed alpha channel support to the hex validation rule:

$v = Validator::make(['color' => '#FF000080'], ['color' => 'hex_color']);
$v->passes(); // true

Release notes

You can see the complete list of new features and updates below and the diff between 10.32.0 and 10.33.0 on GitHub. The following release notes are directly from the changelog: