国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

三個月可更改用戶昵稱兩次

singerye / 2146人閱讀

摘要:需求背景為了表述的更清晰,我這里就簡化了需求,如下每三個月這里按一個月天來算也就是天可更改用戶昵稱兩次,如果三個月內沒有用完兩次,則下一個三個月擁有的更改次數重置,還是兩次。

前言

在實際的項目需求中,我相信很多人都能遇到如標題所說的問題,比如:一個月可修改昵稱一次,或者一年可修改昵稱三次;
我下面的方法也比較簡單,是在與朋友的討論中得到的。

需求背景

為了表述的更清晰,我這里就簡化了需求,如下:

每三個月(這里按一個月30天來算, 也就是90天)可更改用戶昵稱兩次,如果三個月內沒有用完兩次,則下一個三個月擁有的更改次數重置,
還是兩次。
準備工作

建立用戶數據表 users (這里只列出該文章需要的字段):

CREATE TABLE `users` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `username` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT "添加時間",
  `create_time` timestamp NULL DEFAULT NULL COMMENT "添加時間",
  `username_update_num` int(10) unsigned NOT NULL DEFAULT "0" COMMENT "用戶昵稱修改次數",
  PRIMARY KEY (`id`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT="用戶主表";

我使用的是 laravel 框架,使用其內置中間件進行過濾應用程序 HTTP 請求;

具體代碼

先上中間件里的代碼,可跟著注釋看。這里不著重寫中間件的實現方式了,如需了解,請點擊 中間件

    public function handle($request, Closure $next)
    {   
        /**
         * 目前要解決的問題是: 每三個月(90天)可更改昵稱 2 次
         * 下面是解決邏輯
         */
        // 得到該用戶信息
        $user = User::where("id", session("uid"))->first();

        // 用戶注冊的時間,create_time 使用的是 timestamp 類型,所以要轉換一下,方便計算
        $create_time = strtotime($user->create_time);

        /**
         * 計算從注冊時間起一共過去了幾個 90天,也就是過了幾輪
         * 當前時間減去注冊時間 除以 90天的秒數  =  n 輪
         * 得到的數值 n 很少有整數,比如:1.2 ; 
         * 此時需要進一法處理,因為只要比90天多,哪怕多一秒也要進入下一輪
         */
        $n = ceil( round( (time() - $create_time) / (90 * 24 * 3600), 2) );

        /**
         * 每 90 天可修改兩次,每修改一次,數據表 username_update_num + 1
         * 現總修改次數:用戶自注冊時間起至今,共修改了多少次
         * 每輪擁有修改次數:每 90天用戶有兩次修改機會
         * 現總修改次數 / 每輪擁有修改次數 = 現修改到第幾輪;用 $a 表示
         */ 
        $a = $user->username_update_num / 2;

        // 這里寫的是 >=,實際情況下,$a 是不可能大于 $n 的
        if($a >= $n){
            return response()->json(["code" => 0, "message" => "用戶昵稱三個月內只能修改兩次,您的次數已用完", "data" => ""]);
        }else{
            // 說明前 ($n - 1) 輪中有未用完的次數
            if( ($n - $a) > 1){
                // 手動更改數據庫,補全修改次數,也就是默認以前的每輪都把兩次機會用完
                $user->update(["username_update_num" => (($n - 1) * 2)]);
            }
        }
        
        /**
         * 這里是判斷必傳參數,與上面邏輯沒有聯系
         */
        if(empty($request->post("username"))){
            return ["code" => 0, "message" => "用戶昵稱不能為空", "data" => ""];
        }
        if($request->post("username") === $user->username){
            return ["code" => 0, "message" => "修改后的昵稱不能與原昵稱一致", "data" => ""];
        }
        
        return $next($request);
    }

上面中間件的內容已經寫完了,可能會讓人有些迷糊,先別急,因為還沒有寫完,上面只是中間件的內容,是為了攔截已經沒有機會修改昵稱的用戶,以及處理沒有用完次數的用戶,請接著看下面的控制器 UserController.php 的內容:

UserController.php
    /**
     * 用戶昵稱修改 (三個月可修改兩次)
     * 
     * @param IlluminateHttpRequest
     * @return IlluminateHttpResponse
     */
    public function usernameUpdate(Request $request)
    {
        $user = User::where("id", session("uid"))->first();

        $data = [
            "username" => $request->post("username"),
            "username_update_num" => $user->username_update_num + 1,
        ];

        if( !$user->update($data) ){
            return ["code" => 0, "message" => "更改用戶昵稱失敗", "data" => ""];
        }

        return ["code" => 1, "message" => "更改用戶昵稱成功", "data" => ""];
    }

如上述 UserController.php 控制器,因為用戶是否滿足更改昵稱條件已經在中間件里做過判斷,所以能進來控制器的請求,均是有修改昵稱次數的用戶,只需直接更改昵稱且更改次數 + 1 即可。

總結

這篇文章所講述的方法適合同種類型的需求,可根據需求更改相應參數。細節上的處理不多,比如:實際上每個月的天數不一定是 30天,這里不做討論,可相應處理時間即可。

主要還是記錄該種處理方法,也一定有比這種更好的方法!

道路阻且長,仍需不斷前行!

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/30176.html

相關文章

  • #中秋活動#JGKVM:VPS買一送二,購買一個月可贈送兩個月,提供6折優惠碼

    摘要:怎么樣,好不好,剛剛發布了商家的中秋優惠,本次商家放了一個別出心裁的優惠,購買一個月贈送兩個月,你現在購買一個月的,可直接使用到年底,另外原來的折優惠碼同樣可以使用,商家目前提供中國香港美國洛杉磯等地區的,線路方面推薦等多種直連優化線路,同JGKVM怎么樣,JGKVM好不好,JGKVM剛剛發布了商家的中秋優惠,本次商家放了一個別出心裁的優惠,購買一個月贈送兩個月,你現在購買一個月的VPS,可...

    bitkylin 評論0 收藏0
  • 基于react+react-router+redux+socket.io+koa開發一個聊天室

    摘要:最近練手開發了一個項目,是一個聊天室應用。由于我們的項目是一個單頁面應用,因此只需要統一打包出一個和一個。而就是基于實現的一套基于事件訂閱與發布的通信庫。比如說,某一個端口了,而如果端口訂閱了,那么在端,對應的回調函數就會被執行。 最近練手開發了一個項目,是一個聊天室應用。項目雖不大,但是使用到了react, react-router, redux, socket.io,后端開發使用了...

    NusterCache 評論0 收藏0
  • 微信小程序調研

    摘要:外鏈月最新新增提供組件可以用來承載網頁容器會自動鋪滿整個小程序頁面個人類型和海外類型暫不支持需將訪問域名后臺添加至白名單微信授權鏈接是否可訪問需要測試公眾號關聯公眾號關聯小程序后,將可在圖文消息自定義菜單模板消息等功能中使用小程序。 小程序入口 微信發現,小程序 公眾號主體查看小程序 好友分享,群分享 公眾號自定義菜單跳轉 APP頁面跳轉 第三方服務 附近的小程序 掃普通鏈接二維碼打...

    CKJOKER 評論0 收藏0

發表評論

0條評論

singerye

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<