feat(contact): add ContactSubmissionController and contact form view

- Added ContactSubmissionController with index and store methods for handling contact submissions.
- Created a new Blade view for the contact form with fields for name, email, discord, category, subject, and message.
- Updated routes to include endpoints for displaying the contact form and submitting it.
This commit is contained in:
Rico van Zelst
2024-02-24 20:30:23 +01:00
parent e82976026c
commit 1ed7856985
3 changed files with 75 additions and 0 deletions

View File

@@ -0,0 +1,21 @@
<?php
namespace App\Http\Controllers;
use App\Http\Requests\ContactSubmissionRequest;
use App\Models\ContactSubmission;
class ContactSubmissionController extends Controller
{
public function index()
{
return view('contact.index');
}
public function store(ContactSubmissionRequest $request)
{
$contactSubmission = ContactSubmission::create($request->validated());
return redirect()->route('contact.index')->with('success', 'Your message has been sent!');
}
}

View File

@@ -0,0 +1,44 @@
@extends('layouts.app')
@section('title', 'Heimerdinger.LoL • Contact')
@section('description', 'Contact Heimerdinger.LoL for any inquiries, feedback, or suggestions. We are always looking to
improve our website and content.')
@section('content')
<form method="POST" action="{{route('contact.store')}}" class="max-w-screen-md mx-auto mt-2 prose prose-stone">
@csrf
@honeypot
<div class="mb-6">
<label for="name" class="block mb-2 text-sm font-bold text-stone-300">Name</label>
<input type="text" id="name" name="name" class="w-full p-2 border border-stone-300 rounded">
</div>
<div class="mb-6">
<label for="email" class="block mb-2 text-sm font-bold text-stone-300">Email</label>
<input type="email" id="email" name="email" class="w-full p-2 border border-stone-300 rounded">
</div>
<div class="mb-6">
<label for="discord" class="block mb-2 text-sm font-bold text-stone-300">Discord (optional)</label>
<input type="text" id="discord" name="discord" class="w-full p-2 border border-stone-300 rounded">
</div>
<div class="mb-6">
<label for="category" class="block mb-2 text-sm font-bold text-stone-300">Category</label>
<select id="category" name="category" class="w-full p-2 border border-stone-300 rounded">
<option value="question">Question</option>
<option value="advertising">Advertising</option>
<option value="bug_report">Bug Report</option>
<option value="feedback">Feedback</option>
<option value="other">Other</option>
</select>
</div>
<div class="mb-6">
<label for="subject" class="block mb-2 text-sm font-bold text-stone-300">Subject</label>
<input type="text" id="subject" name="subject" class="w-full p-2 border border-stone-300 rounded">
</div>
<div class="mb-6">
<label for="message" class="block mb-2 text-sm font-bold text-stone-300">Message</label>
<textarea id="message" name="message" class="w-full p-2 border border-stone-300 rounded"></textarea>
</div>
<button type="submit" class="w-full p-3 bg-orange-500 text-stone-900 rounded hover:bg-orange-400">Submit</button>
</form>
@endsection

View File

@@ -4,16 +4,20 @@ use App\Http\Controllers\AboutController;
use App\Http\Controllers\AssetsController; use App\Http\Controllers\AssetsController;
use App\Http\Controllers\ChampionController; use App\Http\Controllers\ChampionController;
use App\Http\Controllers\ChampionSkinController; use App\Http\Controllers\ChampionSkinController;
use App\Http\Controllers\ContactSubmissionController;
use App\Http\Controllers\FAQController; use App\Http\Controllers\FAQController;
use App\Http\Controllers\HomeController; use App\Http\Controllers\HomeController;
use App\Http\Controllers\PostsController; use App\Http\Controllers\PostsController;
use App\Http\Controllers\SaleController; use App\Http\Controllers\SaleController;
use App\Http\Controllers\SummonerEmoteController; use App\Http\Controllers\SummonerEmoteController;
use App\Http\Controllers\SummonerIconController; use App\Http\Controllers\SummonerIconController;
use App\Http\Requests\ContactSubmissionRequest;
use App\Models\Champion; use App\Models\Champion;
use App\Models\SummonerIcon; use App\Models\SummonerIcon;
use Illuminate\Support\Facades\Route; use Illuminate\Support\Facades\Route;
use Spatie\Sheets\Sheet; use Spatie\Sheets\Sheet;
use Spatie\Honeypot\ProtectAgainstSpam;
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
@@ -64,5 +68,11 @@ Route::get('/posts', static fn () => (new PostsController())->index())->name('po
Route::get('/post/{post}', static fn (Sheet $post) => (new PostsController())->show($post))->name('posts.show'); Route::get('/post/{post}', static fn (Sheet $post) => (new PostsController())->show($post))->name('posts.show');
// Contact
Route::get('/contact', static fn () => (new ContactSubmissionController())->index())->name('contact.index');
Route::post('/contact', function (ContactSubmissionRequest $request) {
return (new ContactSubmissionController())->store($request);
})->name('contact.store')->middleware(ProtectAgainstSpam::class);
// Pulse // Pulse
Route::get(config('app.login_route'), static fn () => redirect('/pulse'))->name('login')->middleware('auth.basic'); Route::get(config('app.login_route'), static fn () => redirect('/pulse'))->name('login')->middleware('auth.basic');