Form Validation in Laravel Updated on August 15, 2024 by Derrell 3 Minutes, 51 Seconds to Read Form validation is a critical aspect of web application development. It ensures that the data submitted by users meets specific criteria before processing. Laravel provides a powerful and easy-to-use validation system that simplifies this process. This article will guide you through implementing and customising form validation in Laravel. Introduction to Laravel Form Validation Basic Validation Example Using Form Request Validation Customizing Error Messages Validating Arrays Conditional Validation Custom Validation Rules Displaying Validation Errors Conclusion Introduction to Laravel Form Validation Laravel’s validation system is designed to make validating user input simple and effective. Whether you’re validating simple form inputs or complex nested arrays, Laravel provides all the necessary tools to handle validation efficiently. Basic Validation Example Laravel’s most straightforward way to validate a form request is by using the validate method directly in your controller. public function store(Request $request) { $validatedData = $request->validate([ 'name' => 'required|max:255', 'email' => 'required|email|unique:users', 'password' => 'required|min:8', ]); // Store the validated data... } In this example, the validate method takes an array of validation rules. Laravel automatically redirects the user to the previous page if the validation fails. Laravel’s Documentation contains all available validation rules and their function. Using Form Request Validation For more complex validation logic or when you need to reuse validation rules, it’s best to use Form Request Validation. This involves creating a custom request class. Step 1: Generate a Form Request class php artisan make:request StoreUserRequest Step 2: Define validation rules in the generated class public function rules() { return [ 'name' => 'required|max:255', 'email' => 'required|email|unique:users', 'password' => 'required|min:8', ]; } Step 3: Use the Form Request in your controller public function store(StoreUserRequest $request) { // The incoming request is valid... // Store the validated data... } Form Requests provide a clean way to organize validation logic, especially in large applications. Customizing Error Messages Laravel allows you to customize the error messages returned when validation fails. You can do this using the validation method or Form Request class. Inline in the controller $validatedData = $request->validate([ 'name' => 'required|max:255', ], [ 'name.required' => 'We need to know your name!', ]); In a Form Request Class public function messages() { return [ 'name.required' => 'We need to know your name!', ]; } Custom messages make your application more user-friendly by providing clearer and more descriptive feedback. Validating Arrays When your form inputs are arrays, Laravel handles the validation seamlessly. For example: public function store(Request $request) { $validatedData = $request->validate([ 'products.*.name' => 'required', 'products.*.quantity' => 'required|integer|min:1', ]); } In this example, products.*.name ensures that each product in the array has a name attribute, and products.*.quantity checks that the quantity is an integer greater than zero. Conditional Validation Sometimes, you must apply validation rules conditionally based on another field’s value. Laravel offers an elegant way to handle this. public function store(Request $request) { $validatedData = $request->validate([ 'email' => 'required|email', 'phone' => 'required_if:contact_preference,phone', ]); } Here, the phone field is required only if contact_preference is set to phone. Custom Validation Rules Laravel allows you to define custom validation rules if the built-in ones do not meet your needs. Create a custom rule php artisan make:rule Uppercase Define the validation logic public function passes($attribute, $value) { return strtoupper($value) === $value; } public function message() { return 'The :attribute must be uppercase.'; } Use the custom rule in your application use App\Rules\Uppercase; public function store(Request $request) { $validatedData = $request->validate([ 'name' => ['required', new Uppercase], ]); } Custom rules allow you to extend Laravel’s validation capabilities to suit your application’s specific needs. Displaying Validation Errors After validating the form, Laravel automatically redirects back to the form with the error messages stored in the session. You can easily display these errors to the user in your Blade view. @if ($errors->any()) <div class="alert alert-danger"> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif This snippet will display a list of all validation errors, providing clear feedback to the user. Conclusion Form validation is essential to any Laravel application, ensuring that the data processed is clean, accurate, and secure. Laravel’s validation system is robust and flexible, making it easy to implement validation logic in your application. Whether using basic validation, custom rules, or conditional logic, Laravel provides all the tools necessary to manage user input effectively. Following the guidelines and examples in this article, you can confidently handle form validation in your Laravel projects, ensuring a smooth user experience and maintaining the integrity of your application’s data. Boost your Laravel apps with our specialized Laravel Hosting. Experience faster speeds for your Laravel applications and websites thanks to NVMe storage, server protection, dedicated resources, and optimization tools. 99.99% Uptime Free SSL Dedicated IP Address Developer Tools Laravel Hosting Share this Article Derrell Willis Manager, Developer Relations More Articles by Derrell Related Articles How to Check the Laravel Version of Your Project Laravel Blade Basics Troubleshooting 500 Error in Laravel Database Seeding in Laravel Understanding the Laravel env File How to Use Controllers in Laravel Form Validation in Laravel Understanding CSRF Protection in Laravel Creating Laravel Database Model Factories Mastering Laravel Pagination