feat: add edit profile page, controller, request and routes

This commit is contained in:
2026-08-17 19:49:14 +03:30
parent c30b9f4550
commit d4f49df688
5 changed files with 244 additions and 1 deletions
@@ -0,0 +1,40 @@
<?php
namespace App\Http\Controllers\Account;
use App\Http\Controllers\Controller;
use App\Http\Requests\Account\EditProfileRequest;
use App\Http\Requests\EditProfileUpdateRequest;
use App\Models\Province;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
class EditProfileController extends Controller
{
public function index()
{
$title = 'ویرایش حساب';
$user = auth()->user();
$provinces = Province::with('cities')->get();
return view('account.edit-profile' , compact('title','user', 'provinces'));
}
public function update(EditProfileUpdateRequest $request)
{
$inputs = $request->only([
'first_name',
'last_name',
'email',
'mobile',
'city_id',
'province_id'
]);
Auth::user()->update($inputs);
return redirect()->back();
}
}
@@ -0,0 +1,60 @@
<?php
namespace App\Http\Requests;
use Illuminate\Contracts\Validation\ValidationRule;
use Illuminate\Foundation\Http\FormRequest;
class EditProfileUpdateRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*/
public function authorize(): bool
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array<string, ValidationRule|array<mixed>|string>
*/
public function rules(): array
{
return [
'first_name' => [
'required',
'min:2',
'max:64',
'persian_alpha'
],
'last_name' => [
'required',
'min:3',
'max:64',
'persian_alpha'
],
'mobile' => [
'required',
'string',
'ir_mobile:zero'
],
'email' => [
'required',
'email',
'max:150',
'unique:App\Models\User,email,' . auth()->id()
],
'province_id' => [
'nullable',
'exists:provinces,id'
],
'city_id' => [
'nullable',
'exists:cities,id'
],
];
}
}
@@ -0,0 +1,136 @@
@extends('account.layouts.app')
@section('account-content')
<div class="user-profile-wrapper">
@if (session('success'))
<div class="col-lg-12 mb-3">
<div class="alert alert-success">{{ session('success') }}</div>
</div>
@endif
<div class="col-lg-12 mb-4">
<div class="user-profile-card">
<h4 class="user-profile-card-title">بروزرسانی مشخصات پروفایل</h4>
<div class="user-profile-form">
<form action="{{route('accounts.edit-profile.update' , $user->id)}}" method="POST">
@csrf
@method('PUT')
<div class="row">
<div class="col-md-6">
<div class="form-group">
<label>نام </label>
<input type="text" name="first_name" class="form-control"
value="{{ old('first_name', $user->first_name) }}" placeholder="نام شما">
@error('first_name')
<span class="text-danger">
{{ $message }}
</span>
@enderror
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label>نام خانوادگی</label>
<input type="text" name="last_name" class="form-control"
value="{{ old('last_name', $user->last_name) }}" placeholder="نام خانوادگی">
@error('last_name') <span class="text-danger">{{ $message }}</span> @enderror
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label>ایمیل</label>
<input type="text" name="email" class="form-control"
value="{{ old('email', $user->email) }}" placeholder="ایمیل">
@error('email')
<span class="text-danger">{{ $message }}</span>
@enderror
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label>موبایل</label>
<input type="text" name="mobile" class="form-control"
value="{{ old('mobile', $user->mobile) }}" placeholder="موبایل">
@error('mobile')
<span class="text-danger">{{ $message }}</span>
@enderror
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label>استان</label>
<select name="province_id" class="form-control">
<option value="">انتخاب استان</option>
@foreach($provinces as $province)
<option value="{{ $province->id }}"
{{ old('province_id', $user->province_id) == $province->id ? 'selected' : '' }}>
{{ $province->name }}
</option>
@endforeach
</select>
@error('province_id')
<span class="text-danger">{{ $message }}</span>
@enderror
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label>شهر</label>
<select name="city_id" class="form-control">
<option value="">انتخاب شهر</option>
@foreach($province->cities as $city)
<option value="{{ $city->id }}"
{{ old('city_id', $user->city_id) == $city->id ? 'selected' : '' }}>
{{ $city->name }}
</option>
@endforeach
</select>
@error('city_id')
<span class="text-danger">{{ $message }}</span>
@enderror
</div>
</div>
</div>
<button type="submit" class="theme-btn mt-4">آپدیت مشخصات پروفایل <i class="far fa-user"></i>
</button>
</form>
</div>
</div>
</div>
<div class="col-lg-12">
<div class="user-profile-card">
<h4 class="user-profile-card-title">عوض کردن رمز عبور</h4>
<div class="col-lg-12">
<div class="user-profile-form">
<form action="#" method="POST">
@csrf
@method('PUT')
<div class="form-group">
<label>رمز عبور فعلی</label>
<input type="password" name="current_password" class="form-control"
placeholder="رمز عبور فعلی">
@error('current_password') <span class="text-danger">{{ $message }}</span> @enderror
</div>
<div class="form-group">
<label>رمز عبور جدید</label>
<input type="password" name="new_password" class="form-control"
placeholder="رمز عبور جدید">
@error('new_password') <span class="text-danger">{{ $message }}</span> @enderror
</div>
<div class="form-group">
<label>تکرار رمز عبور جدید</label>
<input type="password" name="new_password_confirmation" class="form-control"
placeholder="تکرار رمز عبور جدید">
</div>
<button type="submit" class="theme-btn mt-4">عوض کردن رمز عبور <i class="far fa-key"></i>
</button>
</form>
</div>
</div>
</div>
</div>
</div>
@endsection
@@ -26,7 +26,7 @@
</div> </div>
</li> </li>
<li><a href="profile-wishlist.html"><i class="far fa-heart"></i> علاقه مندی های من</a></li> <li><a href="profile-wishlist.html"><i class="far fa-heart"></i> علاقه مندی های من</a></li>
<li><a href="#"><i class="far fa-cog"></i> تنظیمات</a></li> <li><a href="{{route('accounts.edit-profile.index')}}"><i class="far fa-cog"></i> ویرایش حساب کاربری</a></li>
<li><a href="{{route('auth.login.index')}}"><i class="far fa-sign-out"></i> خروج</a></li> <li><a href="{{route('auth.login.index')}}"><i class="far fa-sign-out"></i> خروج</a></li>
</ul> </ul>
</div> </div>
+7
View File
@@ -1,5 +1,6 @@
<?php <?php
use App\Http\Controllers\Account\EditProfileController;
use App\Http\Controllers\Account\ProfileController; use App\Http\Controllers\Account\ProfileController;
use App\Http\Controllers\FlightController; use App\Http\Controllers\FlightController;
use App\Http\Controllers\IndexController; use App\Http\Controllers\IndexController;
@@ -21,4 +22,10 @@ Route::prefix('tours')->controller(TourController::class)->name('tours.')->group
Route::prefix('account')->name('accounts.')->middleware('auth')->group(function (){ Route::prefix('account')->name('accounts.')->middleware('auth')->group(function (){
Route::get('/profile' ,[ProfileController::class , 'index'])->name('profile'); Route::get('/profile' ,[ProfileController::class , 'index'])->name('profile');
Route::prefix('edit-profile')->name('edit-profile.')->controller(EditProfileController::class)->group(function () {
Route::get('/', 'index')->name('index');
Route::post('/', 'update')->name('update');
});
}); });