From c78b52b6f2f1b5a762d42f0a8cb5e61b90b4ea3d Mon Sep 17 00:00:00 2001 From: mina-esn Date: Sun, 16 Aug 2026 11:30:44 +0330 Subject: [PATCH] feat: implement register logic and make register page dynamic --- .../Controllers/Auth/RegisterController.php | 91 ++++++++- .../Requests/Auth/RegisterPostRequest.php | 75 ++++++- resources/views/auth/register.blade.php | 189 +++++++++++------- 3 files changed, 266 insertions(+), 89 deletions(-) diff --git a/app/Http/Controllers/Auth/RegisterController.php b/app/Http/Controllers/Auth/RegisterController.php index fb1ff90..f58e23d 100644 --- a/app/Http/Controllers/Auth/RegisterController.php +++ b/app/Http/Controllers/Auth/RegisterController.php @@ -2,8 +2,17 @@ namespace App\Http\Controllers\Auth; +use App\Enums\UserStatus; use App\Http\Controllers\Controller; +use App\Http\Requests\Auth\RegisterPostRequest; +use App\Models\File; +use App\Models\Province; +use App\Models\User; +use Illuminate\Support\Facades\DB; use Illuminate\Http\Request; +use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Facades\Hash; +use Illuminate\Support\Facades\Storage; class RegisterController extends Controller { @@ -13,11 +22,89 @@ class RegisterController extends Controller $withOutHeader = true; $withOutFooter = true; - return view('auth.register' , compact('title' , 'withOutHeader' , 'withOutFooter')); + $provinces = Province::where('status', 1) + ->orderBy('name') + ->pluck('name', 'id'); + + return view('auth.register' , compact('title' , 'withOutHeader' , 'withOutFooter' , 'provinces')); } - public function post() + public function post(RegisterPostRequest $request) { + $data = $request->validated(); + + DB::beginTransaction(); + + try { + $fileId = null; + + if ($request->hasFile('avatar')) { + $image = $request->file('avatar'); + + + $imageName = time() . '_' . rand(11111, 99999) . '.' . $image->extension(); + + $path = $image->storeAs( + 'user_avatar', + $imageName, + 'public' + ); + + + $file = File::create([ + 'name' => $imageName, + 'original_name' => $image->getClientOriginalName(), + 'extension' => $image->extension(), + 'size' => $image->getSize(), + 'path' => $path, + ]); + + $fileId = $file->id; + } + + + $user = User::create([ + 'first_name' => $data['first_name'], + 'last_name' => $data['last_name'], + 'file_id' => $fileId, + + 'province_id' => $data['province_id'] ?? null, + 'city_id' => $data['city_id'] ?? null, + + 'national_code' => $data['national_code'], + 'gender' => $data['gender'], + 'marital_status' => $data['marital_status'], + 'spouse_name' => $data['spouse_name'] ?? null, + + 'mobile' => $data['mobile'], + 'email' => $data['email'], + 'username' => $data['username'], + 'password' => Hash::make($data['password']), + 'status' => UserStatus::ENABLE->value, + ]); + + DB::commit(); + + Auth::login($user); + + return redirect() + ->route('index') + ->with('success', 'ثبت‌نام شما با موفقیت انجام شد.'); + + } catch (\Exception $exception) { + + DB::rollBack(); + + if (isset($path) && Storage::disk('public')->exists($path)) { + Storage::disk('public')->delete($path); + } + + return back() + ->withInput() + ->with('error', 'ثبت‌نام با خطا مواجه شد. لطفاً دوباره تلاش کنید.'); + } + + } } diff --git a/app/Http/Requests/Auth/RegisterPostRequest.php b/app/Http/Requests/Auth/RegisterPostRequest.php index e299d38..0a2e96e 100644 --- a/app/Http/Requests/Auth/RegisterPostRequest.php +++ b/app/Http/Requests/Auth/RegisterPostRequest.php @@ -2,8 +2,11 @@ namespace App\Http\Requests\Auth; +use App\Enums\UserGender; +use App\Enums\UserMarital; use Illuminate\Contracts\Validation\ValidationRule; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Validation\Rule; class RegisterPostRequest extends FormRequest { @@ -41,19 +44,69 @@ class RegisterPostRequest extends FormRequest 'required', 'string', 'digits:10', + 'regex:/^[0-9]{10}$/', 'unique:users,national_code' ], - 'gender' => [], - 'marital_status' => [], - 'spouse_name' => [], - 'mobile' => [], - 'email' => [], - 'username' => [], - 'avatar' => [], - 'password' => [], - 'password_confirmation' => [], - 'user_province' => [], - 'user_city' => [], + 'gender' => [ + 'required', + 'integer', + Rule::enum(UserGender::class), + ], + 'marital_status' => [ + 'required', + 'integer', + Rule::enum(UserMarital::class), + ], + 'spouse_name' => [ + 'nullable', + 'string', + 'min:5', + 'max:255', + 'persian_alpha' + ], + 'mobile' => [ + 'required', + 'string', + 'ir_mobile:zero' + ], + 'email' => [ + 'required', + 'email', + 'max:150', + 'unique:users,email' + ], + 'username' => [ + 'required', + 'string', + 'regex:/^[a-zA-Z0-9]+$/', + 'alpha_num', + 'min:8', + 'max:100', + 'unique:users,username' + ], + 'avatar' => [ + 'nullable', + 'image', + 'mimes:jpg,png,jpeg,webp', + 'max:800' + ], + 'password' => [ + 'required', + 'min:8', + 'max:255', + 'alpha_num', + 'confirmed' + ], + 'user_province' => [ + 'nullable', + 'integer', + 'exists:provinces,id' + ], + 'user_city' => [ + 'nullable', + 'integer', + 'exists:cities,id' + ] ]; } } diff --git a/resources/views/auth/register.blade.php b/resources/views/auth/register.blade.php index 99d2965..64068e7 100644 --- a/resources/views/auth/register.blade.php +++ b/resources/views/auth/register.blade.php @@ -7,7 +7,7 @@
@@ -15,162 +15,165 @@
- + @if(session('error')) + {{session('error')}} + @endif + @if(session('success')) + {{session('success')}} + @endif