laravel電商學(xué)習(xí)系列-01 用戶模塊

1.前言

本項(xiàng)目中,用戶新增是通過用戶自己注冊得來的,因此本章節(jié)將注冊/登錄放到用戶模塊來講。
本模塊功能包括:

  • 注冊/登錄
  • 收貨地址

課程傳送門

2. 功能分析

拿到需求,首先是看產(chǎn)品原型,了解清楚需求,想好了,再去做表設(shè)計(jì),最后才動(dòng)手寫代碼。

2.1 注冊/登錄

2.1.1 需求分析

根據(jù)課程中的介紹及效果頁面,我們可以了解到,該功能的需求歸納為以下幾點(diǎn):

  • 用戶注冊需提供:用戶名、郵箱、密碼、確認(rèn)密碼;
  • 注冊時(shí),需驗(yàn)證郵箱;
  • 注冊完成后,郵箱和密碼將作為登錄的賬號和密碼使用;

附功能效果圖如下:


注冊-效果圖
登錄-效果圖
忘記密碼-效果圖

2.1.2 表設(shè)計(jì)

在表設(shè)計(jì)之前要先想好功能的實(shí)現(xiàn)邏輯。

  • 實(shí)現(xiàn)邏輯
    課程中采用的是laravel自帶的用戶認(rèn)證功能實(shí)現(xiàn)注冊登錄驗(yàn)證和自帶的verified中間件 實(shí)現(xiàn)郵件驗(yàn)證的功能。其中,驗(yàn)證郵箱的實(shí)現(xiàn)邏輯是,用一個(gè)字段保存用戶是否已經(jīng)通過驗(yàn)證,通過中間件攔截請求跳轉(zhuǎn)到驗(yàn)證頁面。
  • 表設(shè)計(jì)
    我們在思考程序該實(shí)現(xiàn)時(shí),通常把表結(jié)構(gòu)也想了個(gè)大概,用哪些字段,這些字段有什么用處,把這些搞清楚之后,表設(shè)計(jì)就很簡單了。
    在用戶表中,需要保存郵箱、密碼用作登錄校驗(yàn);需要一個(gè)字段標(biāo)識(shí)該用戶郵箱是否通過驗(yàn)證;郵箱作為用戶驗(yàn)證的唯一標(biāo)識(shí),設(shè)置為唯一鍵。
    另外,還有其他一些看起來不重要但實(shí)際很需要的字段,例如注冊時(shí)間,我們在做表設(shè)計(jì)時(shí)盡量要考慮長遠(yuǎn)一點(diǎn),有一些字段我們在前期需求中沒有用到,但很可能以后運(yùn)營會(huì)需要用到,比如用戶的注冊時(shí)間,等項(xiàng)目運(yùn)營起來有一定用戶量以后,需要做運(yùn)營分析,想要知道一段時(shí)間內(nèi)用戶的增長情況,在這種情況下,你可以懟PM沒有事先說明,但鍋還是你背。
    具體的表結(jié)構(gòu)如下:
CREATE TABLE `users` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT, # 自增id
  `name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, # 用戶名
  `email` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, # 郵件
  `email_verified_at` timestamp NULL DEFAULT NULL, # 郵件驗(yàn)證時(shí)間
  `password` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, # 密碼,用于用戶身份驗(yàn)證
  `remember_token` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL, # 登錄成功后系統(tǒng)分配給用戶的token,用于免密登錄(記住密碼)
  `created_at` timestamp NULL DEFAULT NULL, # 創(chuàng)建時(shí)間,用戶的注冊時(shí)間
  `updated_at` timestamp NULL DEFAULT NULL, # 更新時(shí)間
  PRIMARY KEY (`id`),
  UNIQUE KEY `users_email_unique` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

2.1.3 代碼借鑒

注冊登錄用的laravel自帶的auth,操作簡單,可以了解一下其內(nèi)部實(shí)現(xiàn)方式laravel Auth原理淺析。

2.2 收貨地址

2.2.1 需求分析

收貨地址是屬于用戶的一種屬性,在購買商品選擇收貨地址時(shí)會(huì)用到。具體需求歸納如下:

  • 為了保證商品的順利送達(dá),收件人的信息應(yīng)盡可能詳盡,包括收件人姓名、聯(lián)系方式和詳細(xì)地址;
  • 考慮到用戶習(xí)慣,常用的收件地址變動(dòng)少,將收獲地址按上次使用時(shí)間排序(X寶是設(shè)置了默認(rèn)收獲地址);
收貨地址-效果圖

2.2.2 表設(shè)計(jì)

  • 實(shí)現(xiàn)邏輯
    收獲地址的功能很簡單,就是增刪改查。顯示的時(shí)候按照最近使用時(shí)間排個(gè)序就好了。
  • 表設(shè)計(jì)
    根據(jù)前面的需求分析,可知,用戶收獲地址這張表也很簡單,只需要保存收件人信息,關(guān)聯(lián)用戶id就好了。在表設(shè)計(jì)方面,收獲地址中的省-市-區(qū),方便配合前端做三級聯(lián)動(dòng),當(dāng)然你也可以合并成一個(gè)字段保存,省市區(qū)中間用一個(gè)字符隔開,用的時(shí)候再分割;用了一個(gè)last_used_at字段保存該地址的最近使用時(shí)間;另外,用戶ID這里是做了聯(lián)級刪除的外鍵關(guān)聯(lián)的。
    具體表結(jié)構(gòu)如下:
CREATE TABLE `user_addresses` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT, # 自增ID
  `user_id` int(10) unsigned NOT NULL, # 所屬用戶id
  `province` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, # 收貨地址-省
  `city` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, # 收貨地址-市
  `district` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, # 收貨地址-區(qū)
  `address` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, # 收獲地址-具體地址
  `zip` int(10) unsigned NOT NULL, # 郵編
  `contact_name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, # 聯(lián)系人姓名
  `contact_phone` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, # 聯(lián)系人電話
  `last_used_at` datetime DEFAULT NULL, # 最后一次使用時(shí)間
  `created_at` timestamp NULL DEFAULT NULL, # 創(chuàng)建時(shí)間
  `updated_at` timestamp NULL DEFAULT NULL, # 更新時(shí)間
  PRIMARY KEY (`id`),
  KEY `user_addresses_user_id_foreign` (`user_id`),
  CONSTRAINT `user_addresses_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

2.2.3 代碼借鑒

這一節(jié)的需求和實(shí)現(xiàn)都比較簡單,但是有一些比較好的編碼習(xí)慣可以學(xué)習(xí),例如:

  • 用授權(quán)策略來做權(quán)限控制;
  • 新建專門的 Request 類做校驗(yàn);

下一節(jié):02 商品模塊-基礎(chǔ)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容