Bird
Raised Fist0
Laravelframework~10 mins

Custom validation rules in Laravel - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Custom validation rules
Start Form Submission
↓
Trigger Validation
↓
Check Built-in Rules
↓
Invoke Custom Rule Class
↓
Run Custom Logic
↓
Return Pass/Fail
↓
If Fail -> Show Error
↓
If Pass -> Continue Processing
When a form is submitted, Laravel runs built-in and custom validation rules. Custom rules run your own logic and return pass or fail.
Execution Sample
Laravel
use Illuminate\Contracts\Validation\Rule;

class Uppercase implements Rule {
  public function passes($attribute, $value) {
    return strtoupper($value) === $value;
  }
  public function message() {
    return 'The :attribute must be uppercase.';
  }
}
This custom rule checks if a string is all uppercase and returns an error message if not.
Execution Table
StepActionInput Valuepasses() ResultMessage ReturnedValidation Outcome
1Validate 'name' with Uppercase ruleJOHNtrueN/APass
2Validate 'name' with Uppercase ruleJohnfalseThe name must be uppercase.Fail
3Validate 'name' with Uppercase ruleDOEtrueN/APass
4Validate 'name' with Uppercase ruledoefalseThe name must be uppercase.Fail
5Validation completeN/AN/AN/AStop
💡 Validation stops after all inputs are checked and errors collected or passed.
Variable Tracker
VariableStartAfter 1After 2After 3After 4Final
input_valueN/AJOHNJohnDOEdoeN/A
passes_resultN/AtruefalsetruefalseN/A
validation_outcomeN/APassFailPassFailN/A
Key Moments - 3 Insights
Why does the validation fail when the input is 'John' but pass when it is 'JOHN'?
The passes() method checks if the input is exactly uppercase. 'John' has lowercase letters, so passes() returns false (see execution_table step 2).
What happens if the message() method is missing in the custom rule?
Laravel will throw an error or show a default message. The message() method provides the error text when validation fails (see execution_table steps 2 and 4).
Does the custom rule run before or after built-in rules?
All rules run during validation. Custom rules run alongside built-in ones when listed. Here, the custom rule runs when validating the 'name' field (concept_flow).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the passes() result at step 4?
Afalse
Btrue
CN/A
Derror
💡 Hint
Check the passes() Result column at step 4 in the execution_table.
At which step does the validation outcome become 'Fail' for the first time?
AStep 1
BStep 2
CStep 3
DStep 5
💡 Hint
Look at the Validation Outcome column in the execution_table.
If the input 'name' was 'DOE', what would the validation outcome be according to the execution_table?
AError
BFail
CPass
DUnknown
💡 Hint
Refer to step 3 in the execution_table for input 'DOE'.
Concept Snapshot
Custom validation rules in Laravel let you write your own checks.
Create a class implementing Rule with passes() and message() methods.
passes() returns true or false based on your logic.
message() returns the error text if validation fails.
Use the rule in your validator like built-in rules.
This helps enforce rules Laravel doesn't have by default.
Full Transcript
When you submit a form in Laravel, the framework checks your data using validation rules. Sometimes, you need special checks that Laravel doesn't provide. You can create a custom validation rule by making a class that implements the Rule interface. This class has a passes() method where you write your check, and a message() method that returns the error message if the check fails. For example, a rule can check if a string is all uppercase. When Laravel runs validation, it calls your passes() method with the input. If it returns false, Laravel shows your message. This process happens for each input you validate. This way, you can make your forms smarter and catch mistakes users might make.

Practice

(1/5)
1. What is the main purpose of creating a custom validation rule in Laravel?
easy
A. To define your own logic for validating data beyond built-in rules
B. To change the database schema automatically
C. To create new database tables
D. To generate HTML forms automatically

Solution

  1. Step 1: Understand Laravel validation rules

    Laravel provides built-in rules but sometimes you need to check data in a way not covered by them.
  2. Step 2: Purpose of custom validation rules

    Custom rules let you write your own logic to validate data exactly as you want.
  3. Final Answer:

    To define your own logic for validating data beyond built-in rules -> Option A
  4. Quick Check:

    Custom validation = custom logic [OK]
Hint: Custom rules check data your way, not Laravel's default [OK]
Common Mistakes:
  • Thinking custom rules change database structure
  • Confusing validation with form generation
  • Assuming custom rules create tables
2. Which method must you implement in a Laravel custom validation rule class to check if the data passes validation?
easy
A. check
B. message
C. validate
D. passes

Solution

  1. Step 1: Recall custom rule methods

    Laravel custom validation rules require two methods: passes and message.
  2. Step 2: Identify method for validation logic

    The passes method contains the logic to decide if the data is valid or not.
  3. Final Answer:

    passes -> Option D
  4. Quick Check:

    passes() checks data validity [OK]
Hint: passes() returns true/false for validation [OK]
Common Mistakes:
  • Using message() to check data validity
  • Assuming validate() or check() are required methods
  • Confusing method names
3. Given this custom rule class snippet, what will $rule->passes('age', 17) return?
class AdultRule implements \Illuminate\Contracts\Validation\Rule {
    public function passes($attribute, $value) {
        return $value >= 18;
    }
    public function message() {
        return 'You must be an adult.';
    }
}
medium
A. true
B. Throws an error
C. false
D. null

Solution

  1. Step 1: Understand the passes method logic

    The method returns true if the value is 18 or more, false otherwise.
  2. Step 2: Evaluate passes with value 17

    Since 17 is less than 18, the method returns false.
  3. Final Answer:

    false -> Option C
  4. Quick Check:

    17 < 18 means passes() = false [OK]
Hint: Check condition in passes() with given value [OK]
Common Mistakes:
  • Assuming 17 passes as adult
  • Thinking passes() throws error for numbers
  • Confusing message() with passes()
4. What is wrong with this custom validation rule class?
class EvenNumberRule implements \Illuminate\Contracts\Validation\Rule {
    public function passes($attribute, $value) {
        return $value % 2 == 0
    }
    public function message() {
        return 'The number must be even.';
    }
}
medium
A. message method should return a boolean
B. Missing semicolon after return statement in passes method
C. passes method should accept only one parameter
D. Class must extend a base validation class

Solution

  1. Step 1: Check syntax in passes method

    The return statement lacks a semicolon at the end, causing a syntax error.
  2. Step 2: Verify other method signatures

    message() correctly returns a string, passes() correctly has two parameters, and implementing the interface is enough.
  3. Final Answer:

    Missing semicolon after return statement in passes method -> Option B
  4. Quick Check:

    Missing semicolon = syntax error [OK]
Hint: Look for missing semicolons in PHP code [OK]
Common Mistakes:
  • Thinking message() must return boolean
  • Assuming passes() takes one parameter
  • Believing class must extend base class
5. You want to create a custom validation rule that checks if a string contains only vowels. Which approach correctly implements the passes method?
hard
A. return preg_match('/^[aeiouAEIOU]+$/', $value) === 1;
B. return strlen($value) > 0 && ctype_alpha($value);
C. return strpos($value, 'aeiou') !== false;
D. return $value == strtolower($value);

Solution

  1. Step 1: Understand the requirement

    The string must contain only vowels (a, e, i, o, u) in any case.
  2. Step 2: Analyze each option

    return preg_match('/^[aeiouAEIOU]+$/', $value) === 1; uses regex to check if the string contains only vowels from start to end. return strlen($value) > 0 && ctype_alpha($value); checks only letters but not vowels. return strpos($value, 'aeiou') !== false; checks if 'aeiou' substring exists, which is incorrect. return $value == strtolower($value); checks if string is lowercase, unrelated to vowels.
  3. Final Answer:

    return preg_match('/^[aeiouAEIOU]+$/', $value) === 1; -> Option A
  4. Quick Check:

    Regex matching only vowels = correct passes() [OK]
Hint: Use regex to match only vowels in string [OK]
Common Mistakes:
  • Using ctype_alpha without vowel check
  • Checking substring instead of full string
  • Confusing case check with vowel check
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard