New Static Constructors Added for Fluent Validation Rules
Published on by Paul Redmond
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\Rule;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.41Rule::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 App\Models\Post;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.