Bird
Raised Fist0
Laravelframework~30 mins

Custom validation rules in Laravel - Mini Project: Build & Apply

Choose your learning style10 modes available
Laravel Custom Validation Rules
📖 Scenario: You are building a simple Laravel form to register users. You want to ensure the username is unique and only contains letters and numbers.
🎯 Goal: Create a custom validation rule in Laravel that checks if a username contains only letters and numbers, then apply it to a form request.
📋 What You'll Learn
Create a custom validation rule class named AlphaNumOnly
Add a passes method that returns true only if the username contains letters and numbers
Add a message method that returns a custom error message
Use the custom rule in a form request validation for the username field
💡 Why This Matters
🌍 Real World
Custom validation rules help enforce specific business logic on user input beyond built-in rules, improving data quality and user experience.
💼 Career
Laravel developers often create custom validation rules to meet unique application requirements and maintain clean, reusable validation code.
Progress0 / 4 steps
1
Create the custom validation rule class
Create a Laravel custom validation rule class named AlphaNumOnly using the artisan command php artisan make:rule AlphaNumOnly.
Laravel
Hint

Use the artisan command to create the rule class, then implement passes and message methods.

2
Add a form request class for user registration
Create a Laravel form request class named RegisterUserRequest using the artisan command php artisan make:request RegisterUserRequest.
Laravel
Hint

Use the artisan command to create the form request class.

3
Add validation rules to the form request
In the RegisterUserRequest class, add a rules method that returns an array with the username field using the required, unique:users,username, and the custom AlphaNumOnly rule.
Laravel
Hint

Return an array with the username key and the required validation rules including the custom rule.

4
Use the form request in the controller
In your UserController, update the store method to accept the RegisterUserRequest as a parameter and use it to validate the incoming request.
Laravel
Hint

Use the form request as a parameter and call User::create with the validated data.

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