New Static Constructors Added for Fluent Validation Rules

  • Reading time ~ 3 min
  • 20.01.2023
In Laravel 9.41, we now have a few convenient static constructors added for things like enum rules, files, and image files. Let's dig in and see how they work.

In Laravel 9.41, we now have a few convenient static constructors added for things like enum rules, files, and image files.

You can construct these rule objects directly, but I like the convenience of knowing I have access to them through static constructors on the main Rule object:

use Illuminate\Validation\Rules\Enum;
use Illuminate\Validation\Rules\File;
use Illuminate\Validation\Rules\ImageFile;

// Before
(new File())->default();
(new ImageFile())->dimensions(
    Rule::dimensions()->maxWidth(1000)->maxHeight(500)
);
new Enum(PostStatus::class);

// As of 9.41
Rule::file()->default()
Rule::imageFile()->dimensions(
    Rule::dimensions()->maxWidth(1000)->maxHeight(500)
);
Rule::enum(PostStatus::class);

Here's a more complete example to see how validation rules look using the main Rule class static methods:

use Illuminate\Validation\Rule;
use Illuminate\Validation\Rules\Enum;
use Illuminate\Validation\Rules\Unique;

// Before
$request->validate([
    'status' => [
        'required',
        new Enum(PostStatus::class)
    ],
    'slug' => [
        'required',
        new Unique(Post::class);
    ],
]);
// After
$request->validate([
    'status' => [
        'required',
        // Newly added in 9.41
        Rule::enum(PostStatus::class)
    ],
    'slug' => [
        'required',
        // Note: unique has been available for a while
        Rule::unique(Post::class),
    ],
]);

Some rule objects don't have examples in the documentation, and I find these are more discoverable via the main Rule class methods. If you peek at the rule classes under the Illuminate\Validation\Rules namespace, it looks like the following at the time of writing:

  • DatabaseRule
  • Dimensions
  • Enum
  • ExcludeIf
  • Exists
  • File
  • ImageFile
  • In
  • NotIn
  • Password
  • ProhibitedIf
  • RequiredIf
  • Unique

I'd encourage you to dive into the source to learn more about these useful objects and how they work. The validation docs have helpful examples of how to use some of these rule builders, such as the File and Exists to name a few.

Original
Yurij Finiv

Yurij Finiv

Full stack

ABOUT

I'm full stack laravel developer

I knew my call in programming back in 2006.

WORK EXPERIENCE
CONTACT
Ukraine, Lutsk
+380979856297