Step 1: Update Your .env
File for Database Credentials
Make sure your .env
file (in the root of your Laravel project) has the correct database settings:
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=laravel_learn DB_USERNAME=root DB_PASSWORD=
Step 2: Create the Upload Form
Save this as resources/views/form.blade.php
.
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <title>Form</title> <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:400,700"> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css"> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css"> <link rel="stylesheet" href="http://cdn.bootcss.com/toastr.js/latest/css/toastr.min.css"> <style> body { background: #f8f6f6; font-family: 'Roboto', sans-serif; } .signup-form { width: 40%; margin: 0 auto; padding: 30px 0; } .signup-form form { background: #fff; padding: 30px; border-radius: 3px; box-shadow: 0px 2px 2px rgba(0,0,0,0.3); } .signup-form h2 { margin-bottom: 20px; } .radio { display: block; margin: 16px 0; } </style> </head> <body> <div class="signup-form"> <form action="{{ route('form/save') }}" method="POST" enctype="multipart/form-data"> @csrf <h2>Form Basic</h2> <hr> <div class="form-group"> <label>Full Name *</label> <input type="text" class="form-control @error('name') is-invalid @enderror" name="name" value="{{ old('name') }}"> @error('name') <div class="text-danger">{{ $message }}</div> @enderror </div> <div class="form-group"> <label>Gender *</label><br> <label class="radio"><input type="radio" name="gander" value="male"> <span>Male</span></label> <label class="radio"><input type="radio" name="gander" value="female"> <span>Female</span></label> @error('gander') <div class="text-danger">{{ $message }}</div> @enderror </div> <div class="form-group"> <label>Age *</label> <input type="number" class="form-control @error('age') is-invalid @enderror" name="age" value="{{ old('age') }}"> @error('age') <div class="text-danger">{{ $message }}</div> @enderror </div> <div class="form-group"> <label>Email *</label> <input type="email" class="form-control @error('email') is-invalid @enderror" name="email" value="{{ old('email') }}"> @error('email') <div class="text-danger">{{ $message }}</div> @enderror </div> <div class="form-group"> <label>Document *</label> <input type="file" class="form-control @error('upload') is-invalid @enderror" name="upload"> @error('upload') <div class="text-danger">{{ $message }}</div> @enderror </div> <div class="form-group"> <button type="submit" class="btn btn-primary btn-lg">Save</button> </div> </form> </div> <script src="http://cdn.bootcss.com/jquery/2.2.4/jquery.min.js"></script> <script src="http://cdn.bootcss.com/toastr.js/latest/js/toastr.min.js"></script> {!! Toastr::message() !!} </body> </html>
Step 3: Define Routes (routes/web.php
)
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\FormController;
Route::get('/', fn () => redirect('form/new'));
Route::get('form/new', [FormController::class, 'index'])->name('form/new');
Route::post('form/save', [FormController::class, 'saveRecord'])->name('form/save');
Step 4: Create Controller
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Storage;
use Brian2694\Toastr\Facades\Toastr;
use App\Models\form_basic;
class FormController extends Controller
{
public function index()
{
return view('form');
}
public function saveRecord(Request $request)
{
$request->validate([
'name' => 'required|string|max:255',
'age' => 'required|numeric',
'gander' => 'required|in:male,female',
'email' => 'required|email',
'upload' => 'required|file|max:1024',
]);
DB::beginTransaction();
try {
$file_name = null;
if ($request->hasFile('upload')) {
$file = $request->file('upload');
$file_name = time().'_'.$file->getClientOriginalName();
$file->storeAs('upload', $file_name, 'local');
}
form_basic::create([
'name' => $request->name,
'age' => $request->age,
'gander' => $request->gander,
'email' => $request->email,
'upload' => $file_name,
]);
DB::commit();
Toastr::success('Record created successfully!', 'Success');
return redirect()->back();
} catch (\Exception $e) {
DB::rollBack();
Toastr::error('Something went wrong.', 'Error');
return redirect()->back();
}
}
}
Step 5: Create Model (app/Models/form_basic.php
)
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class form_basic extends Model
{
use HasFactory;
protected $fillable = [
'name', 'age', 'gander', 'email', 'upload'
];
}
Step 6: Create Migration
Run:
php artisan make:migration create_form_basics_table
Inside your migration file:
public function up()
{
Schema::create('form_basics', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('age');
$table->string('gander');
$table->string('email');
$table->string('upload');
$table->timestamps();
});
}
Then run:
php artisan migrate
Step 7: Install Toastr
composer require brian2694/laravel-toastr
In config/app.php
:
'providers' => [
...
Brian2694\Toastr\ToastrServiceProvider::class,
],
'aliases' => [
...
'Toastr' => Brian2694\Toastr\Facades\Toastr::class,
],
Then, publish the config if needed:
php artisan vendor:publish --provider="Brian2694\Toastr\ToastrServiceProvider"
Step 8: Run Your App
php artisan serve