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
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:
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
Exists to name a few.