From a09e8e4eb186204e0a9ff0dcb9bd8bd3269dabf5 Mon Sep 17 00:00:00 2001 From: Windows Store Date: Mon, 17 Aug 2026 18:06:48 +0330 Subject: [PATCH] Implement settings page: profile update and password change --- app/Http/Controllers/SettingController.php | 34 +++++ app/Http/Requests/ProfilePostRequest.php | 57 ++++++++ app/Http/Requests/UpdatePasswordRequest.php | 38 ++++++ .../views/dashboard/layouts/sidebar.blade.php | 3 +- resources/views/dashboard/setting.blade.php | 123 ++++++++++++++++++ routes/dashboard.php | 10 +- 6 files changed, 261 insertions(+), 4 deletions(-) create mode 100644 app/Http/Controllers/SettingController.php create mode 100644 app/Http/Requests/ProfilePostRequest.php create mode 100644 app/Http/Requests/UpdatePasswordRequest.php create mode 100644 resources/views/dashboard/setting.blade.php diff --git a/app/Http/Controllers/SettingController.php b/app/Http/Controllers/SettingController.php new file mode 100644 index 0000000..fab59cf --- /dev/null +++ b/app/Http/Controllers/SettingController.php @@ -0,0 +1,34 @@ +update($request->validated()); + + return back()->with('success', 'مشخصات پروفایل با موفقیت بروزرسانی شد.'); + } + + public function updatePassword(UpdatePasswordRequest $request) + { + Auth::user()->update([ + 'password' => Hash::make($request->new_password), + ]); + + return back()->with('success', 'رمز عبور با موفقیت تغییر کرد.'); + } +} diff --git a/app/Http/Requests/ProfilePostRequest.php b/app/Http/Requests/ProfilePostRequest.php new file mode 100644 index 0000000..94fb2d1 --- /dev/null +++ b/app/Http/Requests/ProfilePostRequest.php @@ -0,0 +1,57 @@ + [ + 'required', + 'string', + 'min:3', + 'max:150', + 'persian_alpha', + + ], + 'last_name' => [ + 'required', + 'string', + 'min:3', + 'max:150', + 'persian_alpha', + ], + 'email'=> [ + 'required', + 'email', + Rule::unique('users', 'email')->ignore($this->user()->id)], + 'mobile'=> [ + 'required', + 'string', + 'digits:11', + Rule::unique('users', 'mobile')->ignore($this->user()->id)], + 'user_province' => [ + 'nullable' + ], + 'user_city' => [ + 'nullable' + ], + ]; + } + + public function attributes(): array + { + return [ + // + ]; + } +} diff --git a/app/Http/Requests/UpdatePasswordRequest.php b/app/Http/Requests/UpdatePasswordRequest.php new file mode 100644 index 0000000..8d6e354 --- /dev/null +++ b/app/Http/Requests/UpdatePasswordRequest.php @@ -0,0 +1,38 @@ + ['required'], + 'new_password' => ['required', 'string', 'min:8', 'confirmed'], + ]; + } + + public function withValidator($validator) + { + $validator->after(function ($validator) { + if (!Hash::check($this->current_password, $this->user()->password)) { + $validator->errors()->add('current_password', 'رمز عبور فعلی صحیح نیست.'); + } + }); + } + + public function attributes(): array + { + return [ + // + ]; + } +} diff --git a/resources/views/dashboard/layouts/sidebar.blade.php b/resources/views/dashboard/layouts/sidebar.blade.php index 52925a5..fd43585 100644 --- a/resources/views/dashboard/layouts/sidebar.blade.php +++ b/resources/views/dashboard/layouts/sidebar.blade.php @@ -13,7 +13,6 @@ diff --git a/resources/views/dashboard/setting.blade.php b/resources/views/dashboard/setting.blade.php new file mode 100644 index 0000000..34652b8 --- /dev/null +++ b/resources/views/dashboard/setting.blade.php @@ -0,0 +1,123 @@ +@extends('dashboard.layouts.app') + +@section('title' , 'تنظیمات') + +@section('account-content') +
+ + @if (session('success')) +
+
{{ session('success') }}
+
+ @endif + +
+ +
+ +
+ +
+
+@endsection diff --git a/routes/dashboard.php b/routes/dashboard.php index f780eb5..83cab48 100644 --- a/routes/dashboard.php +++ b/routes/dashboard.php @@ -1,8 +1,14 @@ name('profile'); -Route::get('dashboard' , [DashboardController::class , 'index'])->name('dashboard'); +Route::get('setting' , [SettingController::class , 'index'])->name('setting'); + +Route::middleware('auth')->group(function () { + Route::get('/setting', [SettingController::class, 'index'])->name('setting'); + Route::put('/setting/profile', [SettingController::class, 'updateProfile'])->name('setting.profile.update'); + Route::put('/setting/password', [SettingController::class, 'updatePassword'])->name('setting.password.update'); +});