Creating Custom Validation Rules in a Laravel Project
There are three ways to add custom validation rules in Laravel: using closures, Rule classes, and form requests. 1. Use closures to be suitable for lightweight verification, such as preventing the username "admin"; 2. Create Rule classes (such as ValidUsernameRule) to make complex logic clearer and maintainable; 3. Integrate multiple rules in form requests and centrally manage verification logic. At the same time, you can set prompts through custom messages methods or incoming error message arrays to improve flexibility and maintainability.

Adding custom validation rules to your Laravel project is a key step to improve form processing flexibility and accuracy. Although the default verification rules are practical, they are often not enough when facing complex business logic, so we need to customize them ourselves.

How to create a basic custom validation rule
Laravel provides a variety of ways to implement custom verification logic, most commonly using Validator::make or using the Artisan command to generate Rule objects. You can start like this:

use Illuminate\Support\Facades\Validator;
$validator = Validator::make($request->all(), [
'username' => ['required', 'string', function ($attribute, $value, $fail) {
if (strtolower($value) === 'admin') {
$fail('The '.$attribute.' cannot be "admin".');
}
}],
]);The closure in this code is a simple custom rule that prevents the username from being "admin". This method is suitable for temporary and lightweight verification needs.
Use Rule class to make verification clearer and more maintainable
For more complex verification logic, it is recommended to use the Rule class. Execute the following Artisan command to generate a rule class file:

-
php artisan make:rule ValidUsernameRule
After that, you will find the corresponding class in app/Rules/ directory. Open this file and write your judgment logic in the passes method, such as checking whether the user name contains sensitive words or format errors.
public function passes($attribute, $value)
{
return strtolower($value) !== 'admin';
}Then use it in the form request or controller:
use App\Rules\ValidUsernameRule;
$request->validate([
'username' => ['required', new ValidUsernameRule],
]);This structure is clearer and easier to test and reuse.
Integrate multiple custom rules in form requests
If you have a complex form that requires multiple custom rules, it is recommended to use "Form Request". After creating it through the command php artisan make:request StoreUserRequest , refer to the Rule class you defined in rules() method, or write a closure directly in it.
public function rules()
{
Return [
'username' => ['required', new ValidUsernameRule],
'email' => [
'required',
'email',
function ($attribute, $value, $fail) {
if (strpos($value, 'example.com') === false) {
$fail('Email must be from example.com domain.');
}
}
]
];
}The advantage of this is to centralize all verification logic in one place to manage it, avoiding the controller bloated and facilitate subsequent maintenance.
Tips for customizing error message
In addition to the rules themselves, prompts are also important. The second parameter can be passed into the validator to specify the error message:
$messages = [
'username.required' => 'Please choose a username.',
'username.ValidUsernameRule' => 'That username is not allowed.',
];
Validator::make($request->all(), $rules, $messages); If it is a form request, you can directly override messages() method to return these prompts.
Basically these methods. The rational use of closures, Rule classes, and form requests can make custom verification both powerful and concise.
The above is the detailed content of Creating Custom Validation Rules in a Laravel Project. For more information, please follow other related articles on the PHP Chinese website!
Hot AI Tools
Undress AI Tool
Undress images for free
Undresser.AI Undress
AI-powered app for creating realistic nude photos
AI Clothes Remover
Online AI tool for removing clothes from photos.
Clothoff.io
AI clothes remover
Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!
Hot Article
Hot Tools
Notepad++7.3.1
Easy-to-use and free code editor
SublimeText3 Chinese version
Chinese version, very easy to use
Zend Studio 13.0.1
Powerful PHP integrated development environment
Dreamweaver CS6
Visual web development tools
SublimeText3 Mac version
God-level code editing software (SublimeText3)
How to use subqueries in Eloquent in Laravel?
Aug 05, 2025 am 07:53 AM
LaravelEloquentsupportssubqueriesinSELECT,FROM,WHERE,andORDERBYclauses,enablingflexibledataretrievalwithoutrawSQL;1.UseselectSub()toaddcomputedcolumnslikepostcountperuser;2.UsefromSub()orclosureinfrom()totreatsubqueryasderivedtableforgroupeddata;3.Us
How to handle recurring payments with Laravel Cashier?
Aug 06, 2025 pm 01:38 PM
InstallLaravelCashierviaComposerandconfiguremigrationandBillabletrait.2.CreatesubscriptionplansinStripeDashboardandnoteplanIDs.3.CollectpaymentmethodusingStripeCheckoutandstoreitviasetupintent.4.SubscribeusertoaplanusingnewSubscription()anddefaultpay
How to use sub-domain routing in Laravel?
Aug 08, 2025 pm 05:07 PM
SetupdomainorlocalenvironmentforsubdomainsupportusingLaravelValet,Homestead,orhostsfileentrieslike127.0.0.1admin.yourapp.test;2.Definewildcardsubdomainroutesinroutes/web.phpusingRoute::domain('{account}.yourapp.com')tocapturesubdomainparameters;3.Cre
How to schedule Artisan commands in Laravel
Aug 14, 2025 pm 12:00 PM
Define the schedule: Use Schedule object to configure Artisan command scheduling in the schedule method of the App\Console\Kernel class; 2. Set the frequency: Set the execution frequency through chain methods such as everyMinute, daily, hourly or cron syntax; 3. Pass parameters: Use arrays or strings to pass parameters to the command; 4. Scheduling the shell command: Use exec method to run system commands; 5. Add conditions: Use when, weekdays and other methods to control the execution timing; 6. Output processing: Use sendOutputTo, appendOutputTo or emailOutputTo to record or
How to create a real-time chat application with Laravel and WebSockets?
Aug 16, 2025 am 04:23 AM
Create a Laravel project and install Sanctum and Pusher packages; 2. Configure Pusher credentials and set up broadcast drivers; 3. Create a message model and migration; 4. Create a MessageSent event that implements ShouldBroadcast; 5. Set up Sanctum authentication and API routing and implement a message controller; 6. Install and configure LaravelEcho and PusherJS in the front-end; 7. Use Echo to join the chat channel and listen to messages; 8. Define broadcast authorization logic in channels.php; 9. Start the service and test real-time message delivery. You can choose to build a LaravelWebSockets service, and the entire process is through Lar
How to use fluent string operations in Laravel?
Aug 14, 2025 pm 04:20 PM
Laravel has introduced smooth string operations based on Illuminate\Support\Stringable since version 7. The answer is to use Str::of() to start chain calls. 1. Create a Stringable instance through Str::of('string') and call the method chained. 2. Common methods include trim, replace, append, slug, upper, etc. for formatting. 3. Use when($condition, $callback) to implement conditional conversion. 4. Use after, before, substr and other methods to extract string fragments. 5. It can be used to clear the actual application.
How to build a real-time chat application with Laravel?
Aug 04, 2025 pm 01:03 PM
SetupLaravelandinstalldependenciesincludingLaravelSanctumandLaravelEcho.2.ConfigurePusherasthebroadcastdriverin.envandenabletheBroadcastServiceProvider.3.CreateaMessagemodelwithamigrationthatincludesuser_idandmessagefields.4.Implementauthenticationus
What is the Laravel application request lifecycle?
Aug 05, 2025 pm 05:48 PM
Laravel's request life cycle goes through 7 stages from user-initiating a request to response return: 1. The request starts with public/index.php, loads the automatic loader and creates an application instance; 2. The HTTP kernel loads configuration, environment and service providers through boot classes; 3. The request handles security, session and other tasks through global middleware; 4. The router matches the request URI and method, executes the corresponding closure or controller, and applies routing middleware; 5. The controller instantiates through dependency injection, executes logic and returns views, JSON, redirects and other responses; 6. The response is encapsulated as a SymfonyResponse object and outputs through $response->send(); 7. Response sends


