diff --git a/Screenshot 2026-08-16 081815.png b/Screenshot 2026-08-16 081815.png new file mode 100644 index 0000000..7b28331 Binary files /dev/null and b/Screenshot 2026-08-16 081815.png differ diff --git a/Screenshot 2026-08-16 081927.png b/Screenshot 2026-08-16 081927.png new file mode 100644 index 0000000..8d8a9d8 Binary files /dev/null and b/Screenshot 2026-08-16 081927.png differ diff --git a/app/Enums/UserGender.php b/app/Enums/UserGender.php new file mode 100644 index 0000000..640ccc4 --- /dev/null +++ b/app/Enums/UserGender.php @@ -0,0 +1,11 @@ +regenerate(); + Auth::logout(); + + return redirect()->route('auth.login.index'); } } diff --git a/app/Http/Controllers/Auth/RegisterController.php b/app/Http/Controllers/Auth/RegisterController.php index c77fd79..932f082 100644 --- a/app/Http/Controllers/Auth/RegisterController.php +++ b/app/Http/Controllers/Auth/RegisterController.php @@ -2,18 +2,57 @@ namespace App\Http\Controllers\Auth; +use App\Enums\UserStatus; use App\Http\Controllers\Controller; +use App\Http\Requests\RegisterPostRequest; +use App\Models\File; +use App\Models\User; use Illuminate\Http\Request; +use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Facades\Hash; class RegisterController extends Controller { public function index() { - return view('auth.register'); + $withoutHeader = true; + $withoutFooter = true; + return view('auth.register', compact('withoutHeader', 'withoutFooter')); } - public function post() + public function post(RegisterPostRequest $request) { + $inputs = $request->validated(); + if ($request->hasFile('image')) { + + $image = $request->file('image'); + + $imageName = time() . rand(11111, 99999) . '.' . $image->extension(); + + $path = $image->storeAs('user_images', $imageName); + + $file = File::create([ + 'name' => $imageName, + 'size' => $image->getSize(), + 'original_name' => $image->getClientOriginalName(), + 'path' => $path, + 'extension' => $image->extension(), + ]); + + $inputs['image_id'] = $file->id; + } + + unset($inputs['image']); + + $inputs['password'] = Hash::make($inputs['password']); + + $inputs['status'] = UserStatus::ENABLE; + + $user = User::create($inputs); + + Auth::login($user); + + return redirect()->route('index'); } } diff --git a/app/Http/Requests/LoginPostRequest.php b/app/Http/Requests/LoginPostRequest.php new file mode 100644 index 0000000..7340fed --- /dev/null +++ b/app/Http/Requests/LoginPostRequest.php @@ -0,0 +1,39 @@ +|string> + */ + public function rules(): array + { + return [ + 'email' => [ + 'required', + 'email', + 'max:150', + ], + + 'password' => [ + 'required', + 'string', + ], + + ]; + } +} diff --git a/app/Http/Requests/RegisterPostRequest.php b/app/Http/Requests/RegisterPostRequest.php new file mode 100644 index 0000000..e541bda --- /dev/null +++ b/app/Http/Requests/RegisterPostRequest.php @@ -0,0 +1,110 @@ +|string> + */ + public function rules(): array + { + return [ + 'first_name' => [ + 'required', + 'persian_alpha', + 'min:2', + 'max:100', + + ], + 'last_name' => [ + 'required', + 'persian_alpha', + 'min:3', + 'max:100', + + ], + 'username' => [ + 'required', + 'regex:/^[a-zA-Z0-9\x{0600}-\x{06FF}]+$/u', + 'min:3', + 'max:20', + 'unique:users,username' + + ], + 'national_code' => [ + 'required', + 'ir_national_id', + 'digits:10', + 'unique:users,national_code', + + ], + 'gender'=>[ + 'required', + new Enum(UserGender::class), + + ], + 'marital_status'=>[ + 'required', + new Enum(UserMaritalStatus::class), + ], + + 'spouse_name'=>[ + 'nullable', + 'string', + 'persian_alpha', + 'max:256', + ], + + 'image_id ' => [ + 'nullable', + 'image', + 'mimes:jpg,jpeg,png,webp', + 'max:800', + ], + 'province_id' => [ + 'nullable', + 'exists:provinces,id', + ], + + 'city_id' => [ + 'nullable', + 'exists:cities,id', + ], + + 'password' => [ + 'required', + 'string', + 'min:6', + 'max:255', + 'confirmed' + ], + 'mobile' => [ + 'required', + 'ir_mobile:zero', + 'unique:users,mobile', + ], + 'email' => [ + 'required', + 'max:150', + 'email', + 'unique:users,mobile', ] + ]; + } +} diff --git a/app/Models/User.php b/app/Models/User.php index e955e75..e895339 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -10,10 +10,11 @@ use Carbon\Carbon; use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; +use Illuminate\Foundation\Auth\User as Authenticated; /** * Class User - * + * * @property int $id * @property string $first_name * @property string $last_name @@ -32,7 +33,7 @@ use Illuminate\Database\Eloquent\SoftDeletes; * @property Carbon $created_at * @property Carbon $updated_at * @property string|null $deleted_at - * + * * @property File|null $file * @property City $city * @property Province $province @@ -42,7 +43,7 @@ use Illuminate\Database\Eloquent\SoftDeletes; * * @package App\Models */ -class User extends Model +class User extends Authenticated { use SoftDeletes; protected $table = 'users'; @@ -75,7 +76,8 @@ class User extends Model 'password', 'province_id', 'city_id', - 'status' + 'status', + 'image_id', ]; public function file() diff --git a/resources/views/auth/login.blade.php b/resources/views/auth/login.blade.php index effab5d..1259e9b 100644 --- a/resources/views/auth/login.blade.php +++ b/resources/views/auth/login.blade.php @@ -17,27 +17,51 @@
-
+ + @csrf
- + + + @error('email') + {{$message}} + @enderror
- +
+ + @error('password') + {{$message}} + @enderror
- + diff --git a/resources/views/auth/register.blade.php b/resources/views/auth/register.blade.php index 922fea1..3e0002a 100644 --- a/resources/views/auth/register.blade.php +++ b/resources/views/auth/register.blade.php @@ -1,4 +1,10 @@ @extends('layouts.app') + +@php + use App\Enums\UserGender; + use App\Enums\UserMaritalStatus; +@endphp + @section('content')
@@ -21,7 +27,9 @@

حساب MyTrip خود را ایجاد کنید

+ method="POST" + enctype="multipart/form-data" + > @csrf
@@ -70,7 +78,7 @@
- @error('last_name') + @error('national_code') {{$message}} @enderror
@@ -86,18 +94,18 @@ > - - - @@ -111,216 +119,218 @@
- -
- + - + - - + - + + + + +
+ + @error('marital_status') + {{ $message }} + @enderror +
+
+ +
+ + +
+ @error('spouse_name') + {{ $message }} + @enderror
- @error('marital_status') - {{ $message }} - @enderror -
-
- -
- - -
- @error('spouse_name') - {{ $message }} - @enderror -
- -
- -
- - -
- @error('mobile') - {{ $message }} - @enderror -
- - -
- -
- - -
- @error('email') - {{ $message }} - @enderror -
- -
- - -
- - +
+ +
+ + +
+ @error('mobile') + {{ $message }} + @enderror
- @error('image') - {{ $message }} - @enderror -
-
- -
- - -
- @error('username') - {{ $message }} - @enderror -
- -
- -
- - -
- - @error('password') - {{$message}} - @enderror -
- -
- -
- - +
+ +
+ + +
+ @error('email') + {{ $message }} + @enderror
- @error('password_confirmation') - {{ $message }} - @enderror -
+
+ - {{-- استان --}} -
- -
- + +
- - - {{-- بعداً استان‌ها را از دیتابیس می‌آوریم --}} - - - + @error('image ') + {{ $message }} + @enderror
- @error('province_id') - {{ $message }} - @enderror -
- - - {{-- شهرستان --}} -
- -
- - +
+ +
+ + +
+ @error('username') + {{ $message }} + @enderror
- @error('city_id') - {{ $message }} - @enderror -
+
+ +
+ + +
+ + @error('password') + {{$message}} + @enderror +
-
- +
+ +
+ + +
+ + @error('password_confirmation') + {{ $message }} + @enderror +
+ + {{-- استان --}} +
+ +
+ + +
+ + @error('province_id') + {{ $message }} + @enderror +
+ + + {{-- شهرستان --}} +
+ +
+ + +
+ + @error('city_id') + {{ $message }} + @enderror +
+ +
+ +
+ diff --git a/resources/views/layouts/app.blade.php b/resources/views/layouts/app.blade.php index 84cb63c..7a73b3f 100644 --- a/resources/views/layouts/app.blade.php +++ b/resources/views/layouts/app.blade.php @@ -52,11 +52,11 @@
-@include('layouts.header') +@includeUnless(isset($withoutHeader),'layouts.header') @yield('content') -@include('layouts.footer') +@includeUnless(isset($withoutFooter),'layouts.footer') diff --git a/resources/views/layouts/navbar.blade.php b/resources/views/layouts/navbar.blade.php index 9f3ad4e..816e8ba 100644 --- a/resources/views/layouts/navbar.blade.php +++ b/resources/views/layouts/navbar.blade.php @@ -123,7 +123,9 @@
- +