前言
購物車這一部分的內(nèi)容非常重要。涉及了很多知識(shí)點(diǎn)。
涉及到的知識(shí)點(diǎn)
- cookie
- session
- php字符串處理
- laravel中間件
這里我們只大致說一下,具體代碼分析請自行去github下載
下載鏈接https://github.com/songzh96/Provence.git
知識(shí)點(diǎn)分析
Cookie是什么?
Cookie實(shí)際上是一小段的文本信息。客戶端請求服務(wù)器,如果服務(wù)器需要記錄該用戶狀態(tài),就使用response向客戶端瀏覽器頒發(fā)一個(gè)Cookie。客戶端瀏覽器會(huì)把Cookie保存起來。當(dāng)瀏覽器再請求該網(wǎng)站時(shí),瀏覽器把請求的網(wǎng)址連同該Cookie一同提交給服務(wù)器。服務(wù)器檢查該Cookie,以此來辨認(rèn)用戶狀態(tài)。服務(wù)器還可以根據(jù)需要修改Cookie的內(nèi)容。
Laravel中的cookie
Laravel會(huì)加密所有已創(chuàng)建的cookie信息,并附加上授權(quán)碼,當(dāng)客戶端擅自修改cookie信息時(shí),該cookie將被廢棄,從而保證安全性。
我們這里主要使用的cookie是存放購物車商品列表信息,
通過Request實(shí)例上的cookie方法獲取cookie數(shù)據(jù),
該方法可以接收一個(gè)參數(shù)名返回對應(yīng)的cookie值,如果不傳入?yún)?shù),默認(rèn)返回所有cookie值
這里我們就是通過這個(gè)方法來獲取購物車中的信息。
Session是什么?
Session是另一種記錄客戶狀態(tài)的機(jī)制,不同的是Cookie保存在客戶端瀏覽器中,而Session保存在服務(wù)器上。客戶端瀏覽器訪問服務(wù)器的時(shí)候,服務(wù)器把客戶端信息以某種形式記錄在服務(wù)器上。這就是Session??蛻舳藶g覽器再次訪問時(shí)只需要從該Session中查找該客戶的狀態(tài)就可以了。
在 Laravel 中主要有兩種方式處理 Session 數(shù)據(jù):全局的輔助函數(shù) session,或者通過 Request 實(shí)例。
這里我們使用的是通過Request實(shí)例。
PHP字符串處理
explode() 函數(shù)把字符串打散為數(shù)組。
資料鏈接:http://www.w3school.com.cn/php/func_string_explode.aspstrpos() 函數(shù)查找字符串在另一字符串中第一次出現(xiàn)的位置。
資料鏈接:http://www.w3school.com.cn/php/func_string_strpos.aspsubstr() 函數(shù)返回字符串的一部分。
資料鏈接:http://www.w3school.com.cn/php/func_string_substr.aspimplode() 函數(shù)返回由數(shù)組元素組合成的字符串。
資料鏈接:http://www.w3school.com.cn/php/func_string_implode.asp
Laravel中間件
簡介
HTTP 中間件為過濾進(jìn)入應(yīng)用的 HTTP 請求提供了一套便利的機(jī)制。例如,Laravel內(nèi)置了一個(gè)中間件來驗(yàn)證用戶是否經(jīng)過認(rèn)證,如果用戶沒有經(jīng)過認(rèn)證,中間件會(huì)將用戶重定向到登錄頁面,否則如果用戶經(jīng)過認(rèn)證,中間件就會(huì)允許請求繼續(xù)往前進(jìn)入下一步操作。
當(dāng)然,除了認(rèn)證之外,中間件還可以被用來處理更多其它任務(wù)。比如:CORS 中間件可以用于為離開站點(diǎn)的響應(yīng)添加合適的頭(跨域);日志中間件可以記錄所有進(jìn)入站點(diǎn)的請求。
本案例的使用
-
創(chuàng)建中間件
在Http\MiddleWare\下創(chuàng)建php文件
-
注冊中間件
在Http\Kernel.php下進(jìn)行修改
-
注冊中間件路由
在Http\routes.php下進(jìn)行修改
功能介紹
購物車中商品的添加和刪除
同步購物車
功能分析
購物車中商品的添加和刪除
首先在前端注冊個(gè)點(diǎn)擊事件(添加),當(dāng)用戶點(diǎn)擊后就通過ajax傳值到后端,
后端首先要判斷用戶是否已登錄,
如果登錄就和數(shù)據(jù)庫同步處理,
若未登錄將產(chǎn)品先從cookie中取數(shù)據(jù)然后進(jìn)行字符串處理,
如果是cookie中已有的產(chǎn)品那么就+1,
如果不是就需要將新產(chǎn)品存放到數(shù)組中,最后再將cookie更新一下
刪除邏輯大致差不多。
同步購物車
- 首先需要在購物車的數(shù)據(jù)表中查找用戶,然后就能找到用戶的購物車中所對應(yīng)的所有商品。
找到之后判斷本地購物車中的商品是否和數(shù)據(jù)庫中的一致
若不一致則需要將本地新添加的商品存儲(chǔ)到數(shù)據(jù)表中
最后為每個(gè)對象附加產(chǎn)品對象便于顯示