Skip to content

Commit 5bac6a7

Browse files
added buildmymvp project using laravel framework
1 parent 68c858e commit 5bac6a7

9,723 files changed

Lines changed: 1139091 additions & 0 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<?php
2+
3+
namespace App\Actions\Fortify;
4+
5+
use App\Models\User;
6+
use Illuminate\Support\Facades\Validator;
7+
use Illuminate\Validation\Rule;
8+
use Laravel\Fortify\Contracts\CreatesNewUsers;
9+
10+
class CreateNewUser implements CreatesNewUsers
11+
{
12+
use PasswordValidationRules;
13+
14+
/**
15+
* Validate and create a newly registered user.
16+
*
17+
* @param array<string, string> $input
18+
*/
19+
public function create(array $input): User
20+
{
21+
Validator::make($input, [
22+
'name' => ['required', 'string', 'max:255'],
23+
'email' => [
24+
'required',
25+
'string',
26+
'email',
27+
'max:255',
28+
Rule::unique(User::class),
29+
],
30+
'password' => $this->passwordRules(),
31+
])->validate();
32+
33+
return User::create([
34+
'name' => $input['name'],
35+
'email' => $input['email'],
36+
'password' => $input['password'],
37+
]);
38+
}
39+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?php
2+
3+
namespace App\Actions\Fortify;
4+
5+
use Illuminate\Validation\Rules\Password;
6+
7+
trait PasswordValidationRules
8+
{
9+
/**
10+
* Get the validation rules used to validate passwords.
11+
*
12+
* @return array<int, \Illuminate\Contracts\Validation\Rule|array<mixed>|string>
13+
*/
14+
protected function passwordRules(): array
15+
{
16+
return ['required', 'string', Password::default(), 'confirmed'];
17+
}
18+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?php
2+
3+
namespace App\Actions\Fortify;
4+
5+
use App\Models\User;
6+
use Illuminate\Support\Facades\Validator;
7+
use Laravel\Fortify\Contracts\ResetsUserPasswords;
8+
9+
class ResetUserPassword implements ResetsUserPasswords
10+
{
11+
use PasswordValidationRules;
12+
13+
/**
14+
* Validate and reset the user's forgotten password.
15+
*
16+
* @param array<string, string> $input
17+
*/
18+
public function reset(User $user, array $input): void
19+
{
20+
Validator::make($input, [
21+
'password' => $this->passwordRules(),
22+
])->validate();
23+
24+
$user->forceFill([
25+
'password' => $input['password'],
26+
])->save();
27+
}
28+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<?php
2+
3+
namespace App\Http\Controllers;
4+
5+
abstract class Controller
6+
{
7+
//
8+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<?php
2+
3+
namespace App\Http\Controllers\Settings;
4+
5+
use App\Http\Controllers\Controller;
6+
use Illuminate\Http\RedirectResponse;
7+
use Illuminate\Http\Request;
8+
use Illuminate\Validation\Rules\Password;
9+
use Inertia\Inertia;
10+
use Inertia\Response;
11+
12+
class PasswordController extends Controller
13+
{
14+
/**
15+
* Show the user's password settings page.
16+
*/
17+
public function edit(): Response
18+
{
19+
return Inertia::render('settings/password');
20+
}
21+
22+
/**
23+
* Update the user's password.
24+
*/
25+
public function update(Request $request): RedirectResponse
26+
{
27+
$validated = $request->validate([
28+
'current_password' => ['required', 'current_password'],
29+
'password' => ['required', Password::defaults(), 'confirmed'],
30+
]);
31+
32+
$request->user()->update([
33+
'password' => $validated['password'],
34+
]);
35+
36+
return back();
37+
}
38+
}
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
<?php
2+
3+
namespace App\Http\Controllers\Settings;
4+
5+
use App\Http\Controllers\Controller;
6+
use App\Http\Requests\Settings\ProfileUpdateRequest;
7+
use Illuminate\Contracts\Auth\MustVerifyEmail;
8+
use Illuminate\Http\RedirectResponse;
9+
use Illuminate\Http\Request;
10+
use Illuminate\Support\Facades\Auth;
11+
use Inertia\Inertia;
12+
use Inertia\Response;
13+
14+
class ProfileController extends Controller
15+
{
16+
/**
17+
* Show the user's profile settings page.
18+
*/
19+
public function edit(Request $request): Response
20+
{
21+
return Inertia::render('settings/profile', [
22+
'mustVerifyEmail' => $request->user() instanceof MustVerifyEmail,
23+
'status' => $request->session()->get('status'),
24+
]);
25+
}
26+
27+
/**
28+
* Update the user's profile settings.
29+
*/
30+
public function update(ProfileUpdateRequest $request): RedirectResponse
31+
{
32+
$request->user()->fill($request->validated());
33+
34+
if ($request->user()->isDirty('email')) {
35+
$request->user()->email_verified_at = null;
36+
}
37+
38+
$request->user()->save();
39+
40+
return to_route('profile.edit');
41+
}
42+
43+
/**
44+
* Delete the user's account.
45+
*/
46+
public function destroy(Request $request): RedirectResponse
47+
{
48+
$request->validate([
49+
'password' => ['required', 'current_password'],
50+
]);
51+
52+
$user = $request->user();
53+
54+
Auth::logout();
55+
56+
$user->delete();
57+
58+
$request->session()->invalidate();
59+
$request->session()->regenerateToken();
60+
61+
return redirect('/');
62+
}
63+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<?php
2+
3+
namespace App\Http\Controllers\Settings;
4+
5+
use App\Http\Controllers\Controller;
6+
use App\Http\Requests\Settings\TwoFactorAuthenticationRequest;
7+
use Illuminate\Routing\Controllers\HasMiddleware;
8+
use Illuminate\Routing\Controllers\Middleware;
9+
use Inertia\Inertia;
10+
use Inertia\Response;
11+
use Laravel\Fortify\Features;
12+
13+
class TwoFactorAuthenticationController extends Controller implements HasMiddleware
14+
{
15+
/**
16+
* Get the middleware that should be assigned to the controller.
17+
*/
18+
public static function middleware(): array
19+
{
20+
return Features::optionEnabled(Features::twoFactorAuthentication(), 'confirmPassword')
21+
? [new Middleware('password.confirm', only: ['show'])]
22+
: [];
23+
}
24+
25+
/**
26+
* Show the user's two-factor authentication settings page.
27+
*/
28+
public function show(TwoFactorAuthenticationRequest $request): Response
29+
{
30+
$request->ensureStateIsValid();
31+
32+
return Inertia::render('settings/two-factor', [
33+
'twoFactorEnabled' => $request->user()->hasEnabledTwoFactorAuthentication(),
34+
'requiresConfirmation' => Features::optionEnabled(Features::twoFactorAuthentication(), 'confirm'),
35+
]);
36+
}
37+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?php
2+
3+
namespace App\Http\Middleware;
4+
5+
use Closure;
6+
use Illuminate\Http\Request;
7+
use Illuminate\Support\Facades\View;
8+
use Symfony\Component\HttpFoundation\Response;
9+
10+
class HandleAppearance
11+
{
12+
/**
13+
* Handle an incoming request.
14+
*
15+
* @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
16+
*/
17+
public function handle(Request $request, Closure $next): Response
18+
{
19+
View::share('appearance', $request->cookie('appearance') ?? 'system');
20+
21+
return $next($request);
22+
}
23+
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
<?php
2+
3+
namespace App\Http\Middleware;
4+
5+
use Illuminate\Foundation\Inspiring;
6+
use Illuminate\Http\Request;
7+
use Inertia\Middleware;
8+
9+
class HandleInertiaRequests extends Middleware
10+
{
11+
/**
12+
* The root template that's loaded on the first page visit.
13+
*
14+
* @see https://inertiajs.com/server-side-setup#root-template
15+
*
16+
* @var string
17+
*/
18+
protected $rootView = 'app';
19+
20+
/**
21+
* Determines the current asset version.
22+
*
23+
* @see https://inertiajs.com/asset-versioning
24+
*/
25+
public function version(Request $request): ?string
26+
{
27+
return parent::version($request);
28+
}
29+
30+
/**
31+
* Define the props that are shared by default.
32+
*
33+
* @see https://inertiajs.com/shared-data
34+
*
35+
* @return array<string, mixed>
36+
*/
37+
public function share(Request $request): array
38+
{
39+
[$message, $author] = str(Inspiring::quotes()->random())->explode('-');
40+
41+
return [
42+
...parent::share($request),
43+
'name' => config('app.name'),
44+
'quote' => ['message' => trim($message), 'author' => trim($author)],
45+
'auth' => [
46+
'user' => $request->user(),
47+
],
48+
'sidebarOpen' => ! $request->hasCookie('sidebar_state') || $request->cookie('sidebar_state') === 'true',
49+
];
50+
}
51+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<?php
2+
3+
namespace App\Http\Requests\Settings;
4+
5+
use App\Models\User;
6+
use Illuminate\Contracts\Validation\ValidationRule;
7+
use Illuminate\Foundation\Http\FormRequest;
8+
use Illuminate\Validation\Rule;
9+
10+
class ProfileUpdateRequest extends FormRequest
11+
{
12+
/**
13+
* Get the validation rules that apply to the request.
14+
*
15+
* @return array<string, ValidationRule|array<mixed>|string>
16+
*/
17+
public function rules(): array
18+
{
19+
return [
20+
'name' => ['required', 'string', 'max:255'],
21+
22+
'email' => [
23+
'required',
24+
'string',
25+
'lowercase',
26+
'email',
27+
'max:255',
28+
Rule::unique(User::class)->ignore($this->user()->id),
29+
],
30+
];
31+
}
32+
}

0 commit comments

Comments
 (0)