Laravel11開發購物車day2在Laravel中,通常我們會使用內建的phpartisanui:auth命令來快速生成認證相關的功能,如登錄、註冊和密碼重置表單。但是,有時候我們希望手動實現這些功能,以便更好地控制頁面的設計和功能邏輯。這篇文章將介紹如何在不使用ui:auth命令的情況下,手動編寫Laravel的註冊和密碼重置功能。目錄1.實現用戶註冊功能2.實現密碼重置功能3.測試和部署4.總結1.實現用戶註冊功能1.1設置註冊路由首先,我們需要為註冊頁面和註冊邏輯設置相應的路由。在routes/web.php文件中,添加以下路由:phpuseAppHttpControllersAuthRegisterController;//顯示註冊表單Route::get'register',RegisterController::class,'showRegistrationForm']name'register';//處理註冊請求Route::post'register',RegisterController::class,'register']name'register.submit';這些路由分別用來顯示註冊表單以及處理用戶提交的註冊請求。1.2創建RegisterController我們需要創建一個控制器來處理註冊邏輯。使用Artisan命令創建控制器:bashphpartisanmake:controllerAuth/RegisterController接下來,在控制器中編寫以下邏輯:phpnamespaceAppHttpControllersAuth;useAppHttpControllersController;useAppModelsUser;useIlluminateSupportFacadesHash;useIlluminateSupportFacadesValidator;useIlluminateHttpRequest;useIlluminateSupportFacadesAuth;classRegisterControllerextendsController{//顯示註冊表單publicfunctionshowRegistrationForm{returnview'auth.register';}//處理註冊請求publicfunctionregisterRequest$request{//驗證用戶輸入的數據$thisvalidator$requestallvalidate;//創建新用戶$user$thiscreate$requestall;//自動登錄新註冊用戶Auth::login$user;//註冊成功後重定向到後端首頁或其他頁面returnredirectroute'dashboard';}//驗證用戶輸入protectedfunctionvalidatorarray$data{returnValidator::make$data,'name''required','string','max:255'],'email''required','string','email','max:255','unique:users'],'password''required','string','min:8','confirmed'],];}//創建新用戶protectedfunctioncreatearray$data{returnUser::create'name'$data'name'],'email'$data'email'],'password'Hash::make$data'password'],];}}這個控制器負責顯示註冊表單、驗證用戶輸入的數據、創建新用戶並自動將新註冊的用戶登錄。1.3創建註冊視圖接下來,我們需要為註冊頁面創建一個視圖。在resources/views/auth/目錄下創建一個名為register.blade.php的文件:blade@extends'layouts.backend'@section'content'divclass"containermt5"h2Register/h2formaction"{{route'register.submit'}}"method"POST"@csrfdivclass"mb3"labelfor"name"class"formlabel"Name/labelinputtype"text"class"formcontrol@error'name'isinvalid@enderror"id"name"name"name"value"{{old'name'}}"requiredautofocus@error'name'spanclass"invalidfeedback"role"alert"strong{{$message}}/strong/span@enderror/divdivclass"mb3"labelfor"email"class"formlabel"EmailAddress/labelinputtype"email"class"formcontrol@error'email'isinvalid@enderror"id"email"name"email"value"{{old'email'}}"required@error'email'spanclass"invalidfeedback"role"alert"strong{{$message}}/strong/span@enderror/divdivclass"mb3"labelfor"password"class"formlabel"Password/labelinputtype"password"class"formcontrol@error'password'isinvalid@enderror"id"password"name"password"required@error'password'spanclass"invalidfeedback"role"alert"strong{{$message}}/strong/span@enderror/divdivclass"mb3"labelfor"passwordconfirm"class"formlabel"ConfirmPassword/labelinputtype"password"class"formcontrol"id"passwordconfirm"name"passwordconfirmation"required/divbuttontype"submit"class"btnbtnprimary"Register/button/form/div@endsection這個註冊表單會要求用戶輸入姓名、電子郵件地址、密碼及確認密碼。2.實現密碼重置功能Laravel提供了方便的密碼重置功能,我們只需要手動設置路由、控制器和視圖來實現。2.1設置密碼重置路由在routes/web.php中,添加與密碼重置相關的路由:phpuseAppHttpControllersAuthForgotPasswordController;useAppHttpControllersAuthResetPasswordController;//顯示密碼重置請求表單Route::get'password/reset',ForgotPasswordController::class,'showLinkRequestForm']name'password.request';//處理發送重置郵件的請求Route::post'password/email',ForgotPasswordController::class,'sendResetLinkEmail']name'password.email';//顯示密碼重置表單Route::get'password/reset/{token}',ResetPasswordController::class,'showResetForm']name'password.reset';//處理密碼重置請求Route::post'password/reset',ResetPasswordController::class,'reset']name'password.update';2.2創建ForgotPasswordController這個控制器處理顯示重置密碼請求表單和發送重置郵件的邏輯。創建控制器:bashphpartisanmake:controllerAuth/ForgotPasswordController編寫控制器邏輯:phpnamespaceAppHttpControllersAuth;useAppHttpControllersController;useIlluminateHttpRequest;useIlluminateSupportFacadesPassword;classForgotPasswordControllerextendsController{//顯示密碼重置請求表單publicfunctionshowLinkRequestForm{returnview'auth.passwords.email';}//處理發送重置郵件的請求publicfunctionsendResetLinkEmailRequest$request{$requestvalidate'email''required|email'];//發送重置郵件$statusPassword::sendResetLink$requestonly'email';return$statusPassword::RESETLINKSENT?backwith'status'$status]:backwithErrors'email'$status];}}2.3創建ResetPasswordController這個控制器處理顯示密碼重置表單和處理密碼重置的邏輯。創建控制器:bashphpartisanmake:controllerAuth/ResetPasswordController編寫控制器邏輯:phpnamespaceAppHttpControllersAuth;useAppHttpControllersController;useIlluminateHttpRequest;useIlluminateSupportFacadesPassword;useIlluminateSupportFacadesHash;useIlluminateSupportStr;useIlluminateAuthEventsPasswordReset;classResetPasswordControllerextendsController{//顯示密碼重置表單publicfunctionshowResetFormRequest$request,$tokennull{returnview'auth.passwords.reset','token'$token,'email'$requestemail];}//處理密碼重置請求publicfunctionresetRequest$request{$requestvalidate'token''required','email''required|email','password''required|confirmed|min:8',];//重置密碼$statusPassword::reset$requestonly'email','password','passwordconfirmation','token',function$user,$password{$userforceFill'password'Hash::make$password,'remembertoken'Str::random60,]save;eventnewPasswordReset$user;};return$statusPassword::PASSWORDRESET?redirectroute'login'with'status',$status:backwithErrors'email'$status]];}}2.4創建密碼重置視圖接下來,我們需要為密碼重置功能創建兩個視圖:輸入電子郵件的重置請求表單設置新密碼的表單密碼重置請求表單email.blade.phpblade@extends'layouts.backend'@section'content'divclass"containermt5"h2ResetPassword/h2@ifsession'status'divclass"alertalertsuccess"{{session'status'}}/div@endifformaction"{{route'password.email'}}"method"POST"@csrfdivclass"mb3"labelfor"email"class"formlabel"Emailaddress/labelinputtype"email"class"formcontrol@error'email'isinvalid@enderror"id"email"name"email"value"{{old'email'}}"requiredautofocus@error'email'spanclass"invalidfeedback"role"alert"strong{{$message}}/strong/span@enderror/divbuttontype"submit"class"btnbtnprimary"SendPasswordResetLink/button/form/div@endsection密碼重置表單reset.blade.phpblade@extends'layouts.backend'@section'content'divclass"containermt5"h2ResetPassword/h2formaction"{{route'password.update'}}"method"POST"@csrfinputtype"hidden"name"token"value"{{$token}}"divclass"mb3"labelfor"email"class"formlabel"Emailaddress/labelinputtype"email"class"formcontrol@error'email'isinvalid@enderror"id"email"name"email"value"{{$email??old'email'}}"requiredautofocus@error'email'spanclass"invalidfeedback"role"alert"strong{{$message}}/strong/span@enderror/divdivclass"mb3"labelfor"password"class"formlabel"NewPassword/labelinputtype"password"class"formcontrol@error'password'isinvalid@enderror"id"password"name"password"required@error'password'spanclass"invalidfeedback"role"alert"strong{{$message}}/strong/span@enderror/divdivclass"mb3"labelfor"passwordconfirm"class"formlabel"ConfirmPassword/labelinputtype"password"class"formcontrol"id"passwordconfirm"name"passwordconfirmation"required/divbuttontype"submit"class"btnbtnprimary"ResetPassword/button/form/div@endsection3.測試和部署在實現了註冊和密碼重置功能之後,您可以通過以下步驟來測試這些功能:1.訪問/register頁面進行用戶註冊,並測試是否成功創建新用戶。2.訪問/password/reset頁面來測試密碼重置功能,確認用戶是否可以成功重置密碼並登錄。3.配置郵件服務(如SMTP)來測試重置密碼郵件的發送。4.總結這篇文章詳細介紹了如何在不使用phpartisanui:auth的情況下手動實現Laravel的用戶註冊和密碼重置功能。我們通過手動設置路由、控制器和視圖來完成這些功能,這樣可以靈活地自定義頁面的佈局和功能。圖片1.網站登入圖片]https://raw.gitmirror.com/renfuher/imagedrive/main/develop/templatelogin.png2.登入的畫面]https://raw.gitmirror.com/renfuher/imagedrive/main/develop/templateproduct.png