Creating a contact form in Laravel 5 using the Form Request feature involves several steps that adhere to the framework’s conventions and best practices. Laravel’s Form Request is a powerful mechanism for handling form validation logic in a separate class, promoting clean and maintainable code. Below, I will provide a detailed guide on how to implement a contact form in Laravel 5 using Form Request.
Firstly, let’s create the necessary components, including a controller, a Form Request class, and a view:
-
Controller:
-
Generate a controller using the Artisan command-line tool. Open your terminal and run:
bashphp artisan make:controller ContactController -
This command will create a new file at
app/Http/Controllers/ContactController.php. Open this file in your preferred code editor. -
Inside
ContactController.php, create a method to show the contact form and another method to handle form submissions. For instance:phpnamespace App\Http\Controllers; use Illuminate\Http\Request; class ContactController extends Controller { public function showForm() { return view('contact.form'); } public function submitForm(Request $request) { // Handle form submission logic here } }
-
-
Form Request:
-
Generate a Form Request class to handle the validation. Run the following command:
bashphp artisan make:request ContactFormRequest -
This command will create a new file at
app/Http/Requests/ContactFormRequest.php. Open this file and define the validation rules for your contact form, such as:phpnamespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class ContactFormRequest extends FormRequest { public function authorize() { return true; } public function rules() { return [ 'name' => 'required|string|max:255', 'email' => 'required|email|max:255', 'message' => 'required|string', ]; } }
-
-
Routes:
- Open the
web.phpfile located in theroutesdirectory. Define the routes for displaying the form and handling form submissions:phpuse App\Http\Controllers\ContactController; Route::get('/contact', [ContactController::class, 'showForm'])->name('contact.show'); Route::post('/contact', [ContactController::class, 'submitForm'])->name('contact.submit');
- Open the
-
View:
- Create a Blade view file to display the contact form. For example, create a file at
resources/views/contact/form.blade.phpand structure it according to your design requirements:html<form action="{{ route('contact.submit') }}" method="post"> @csrf <label for="name">Name:label> <input type="text" name="name" value="{{ old('name') }}" required> <label for="email">Email:label> <input type="email" name="email" value="{{ old('email') }}" required> <label for="message">Message:label> <textarea name="message" required>{{ old('message') }}textarea> <button type="submit">Submitbutton> form>
- Create a Blade view file to display the contact form. For example, create a file at
-
Controller Logic:
- Now, in the
submitFormmethod of yourContactController, add the logic to handle the form submission, such as sending an email or saving the data to a database:phppublic function submitForm(ContactFormRequest $request) { // Validation passed, proceed with handling the form submission // For example, send an email \Mail::to('[email protected]')->send(new \App\Mail\ContactMail($request->all())); // Redirect the user with a success message return redirect()->route('contact.show')->with('success', 'Your message has been sent!'); }
- Now, in the
-
Validation Messages:
- Customize the validation error messages by adding them to the
messagesmethod in yourContactFormRequest:phppublic function messages() { return [ 'name.required' => 'The name field is required.', 'email.required' => 'The email field is required.', 'email.email' => 'Please enter a valid email address.', 'message.required' => 'The message field is required.', ]; }
- Customize the validation error messages by adding them to the
This comprehensive guide covers the creation of a contact form in Laravel 5 using the Form Request feature, ensuring clean separation of concerns, adherence to Laravel conventions, and the utilization of validation rules. By following these steps, you establish a robust and maintainable structure for handling contact form submissions in your Laravel application.
More Informations

Expanding further on the topic of creating a contact form in Laravel 5 using the Form Request feature involves delving into additional considerations, such as implementing email notifications, handling file uploads, and incorporating frontend validation. Let’s explore these aspects in a more detailed manner.
Email Notifications:
To enhance the user experience and keep the site administrator informed, Laravel allows you to send email notifications easily. In the example provided earlier, the submitForm method in the ContactController sends an email using the Mail facade. However, to use email notifications, you can create a dedicated Mailable class. Run the following Artisan command:
bashphp artisan make:mail ContactMail
This command generates a new Mailable class in the app/Mail directory. Open the generated ContactMail.php file and modify it according to your needs, including the email subject, view, and data to be passed to the view.
phppublic function build()
{
return $this->view('emails.contact')
->subject('New Contact Form Submission');
}
Create a Blade view file at resources/views/emails/contact.blade.php to customize the email content. Access the form data within this view using the $request variable passed to the Mailable class:
bladeName: {{ $request->name }}
Email: {{ $request->email }}
Message: {{ $request->message }}
Now, in the submitForm method, you can send the email using the Mailable class:
php\Mail::to('[email protected]')->send(new \App\Mail\ContactMail($request->all()));
File Uploads:
If your contact form includes file uploads, Laravel simplifies the handling of uploaded files. In your form view, include the enctype attribute in the form tag:
html<form action="{{ route('contact.submit') }}" method="post" enctype="multipart/form-data">
form>
In your ContactFormRequest class, add validation rules for the file:
phppublic function rules()
{
return [
'name' => 'required|string|max:255',
'email' => 'required|email|max:255',
'message' => 'required|string',
'attachment' => 'file|max:10240', // Example: Max file size of 10MB
];
}
Remember to adjust the max rule based on your file size requirements.
In your submitForm method, handle the file upload:
phppublic function submitForm(ContactFormRequest $request)
{
// Other form submission logic...
if ($request->hasFile('attachment')) {
$attachmentPath = $request->file('attachment')->store('attachments');
// Save the attachment path or perform additional logic
}
// Redirect the user with a success message
return redirect()->route('contact.show')->with('success', 'Your message has been sent!');
}
Frontend Validation:
While Laravel’s Form Request handles server-side validation, incorporating frontend validation enhances the user experience by providing instant feedback. Laravel includes the popular JavaScript library Vue.js by default, making it convenient to implement frontend validation.
In your form view, utilize Laravel’s validation errors bag to display errors:
html<form action="{{ route('contact.submit') }}" method="post">
@csrf
<label for="name">Name:label>
<input type="text" name="name" value="{{ old('name') }}" required>
@error('name')
<span class="text-red-500">{{ $message }}span>
@enderror
<button type="submit">Submitbutton>
form>
Ensure you include the necessary frontend assets, such as Vue.js, for this to work seamlessly.
In your controller, you can customize the JSON response for AJAX requests to include validation errors:
phppublic function submitForm(ContactFormRequest $request)
{
// Validation passed, proceed with handling the form submission
if ($request->ajax()) {
return response()->json(['success' => true]);
}
// Redirect the user with a success message
return redirect()->route('contact.show')->with('success', 'Your message has been sent!');
}
Implementing frontend validation requires additional JavaScript code to handle form submissions and display error messages. Laravel Mix simplifies the process of compiling and managing frontend assets.
In conclusion, by incorporating email notifications, handling file uploads, and implementing frontend validation, you can create a robust and feature-rich contact form in Laravel 5. These additional considerations not only improve functionality but also contribute to a seamless user experience and efficient form handling within your Laravel application.
