Laravel - Validation - Using Rule Objects

Laravel provides a variety of helpful validation rules; however, you may wish to specify some of your own. One method of registering custom validation rules is using rule objects. To generate a new rule object, you may use the make:rule Artisan command. Let's use this command to generate a rule that verifies a string is uppercase. Laravel will place the new rule in the app/Rules directory. If this directory does not exist, Laravel will create it when you execute the Artisan command to create your rule:

    
    php artisan make:rule Uppercase
	

Once the rule has been created, we are ready to define its behavior. A rule object contains two methods: passes and message. The passes method receives the attribute value and name, and should return true or false depending on whether the attribute value is valid or not. The message method should return the validation error message that should be used when validation fails:

    
    

You may call the trans helper from your message method if you would like to return an error message from your translation files:

    
    /**
     * Get the validation error message.
     *
     * @return string
     */
    public function message()
    {
        return trans('validation.uppercase');
    }
	

Once the rule has been defined, you may attach it to a validator by passing an instance of the rule object with your other validation rules:

    
    use App\Rules\Uppercase;
    
    $request->validate([
        'name' => ['required', 'string', new Uppercase],
    ]);