成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

從零開(kāi)始打造自己的PHP框架——第6章

shusen / 2638人閱讀

摘要:前言第到章,我們完成了一個(gè)屬于自己的框架,麻雀雖小五臟俱全。接下來(lái),我們使用框架開(kāi)發(fā)一個(gè)迷你項(xiàng)目書簽收藏。內(nèi)包含框架的核心文件。源碼分享書簽從零開(kāi)始打造自己的框架與之詳解

前言

第0到5章,我們完成了一個(gè)屬于自己的php框架,麻雀雖小五臟俱全。接下來(lái),我們使用vkphp框架開(kāi)發(fā)一個(gè)迷你項(xiàng)目——書簽收藏。在開(kāi)發(fā)過(guò)程中,也許會(huì)遇到很多問(wèn)題,這時(shí)候我們就可以對(duì)框架進(jìn)行調(diào)整,使之更加完善。

系統(tǒng)描述:
用戶登錄系統(tǒng),能夠看到自己收藏的書簽,并且可以對(duì)書簽進(jìn)行增刪改查。

系統(tǒng)功能:
1、注冊(cè)登錄。
2、書簽展示。
3、增刪查改。

原文鏈接:http://www.voidking.com/2017/...

項(xiàng)目結(jié)構(gòu)
vkphp
├─app
│  ├─ctrl
│  │  └─bookmark
│  ├─model
│  └─smarty
│     ├─templates
│     │  └─bookmark
│     └─templates_c 
├─assets
├─config
├─core
├─log
└─vendor

app內(nèi)包含控制器、model、smarty模板。

config內(nèi)包含全局配置文件。

core內(nèi)包含框架的核心文件。

log內(nèi)存放日志文件。

assets包含靜態(tài)資源文件。

vendor內(nèi)包含第三方庫(kù)。

我們編寫業(yè)務(wù)代碼的位置,主要在app、assets兩個(gè)目錄。

注冊(cè)登錄 表結(jié)構(gòu)

修改vk_user表結(jié)構(gòu)為:

DROP TABLE IF EXISTS `vk_user`;
CREATE TABLE `vk_user` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `username` varchar(20) NOT NULL,
  `password` varchar(32) NOT NULL COMMENT "md5加密",
  `salt` varchar(16) NOT NULL,
  `screen_name` varchar(20) DEFAULT "低調(diào)的用戶",
  `email` tinytext,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
model

app/model目錄下,已經(jīng)有了user.php這個(gè)model類。


控制器

app/ctrl/bookmark目錄下,新建user_ctrl.php。

create(300,80,40);
    }

    public function check(){
        if(!(isset($_REQUEST["code"]) && $_REQUEST["code"] !== "")){
            $result = array(
                "code"=>"-4",
                "ext"=>"驗(yàn)證碼不能為空"
            );
            echo json_encode($result,JSON_UNESCAPED_UNICODE);
            return;
        }
        $code = $_REQUEST["code"];
        $captcha = new coreutilcaptcha();
        $ret = $captcha->check($code);
        if($ret == 0){
            $result = array(
                "code"=>"0",
                "ext"=>"驗(yàn)證成功"
            );
        }else if($ret == -1){
            $result = array(
                "code"=>"-1",
                "ext"=>"請(qǐng)先獲取驗(yàn)證碼"
            );
        }else if($ret == -2){
            $result = array(
                "code"=>"-2",
                "ext"=>"驗(yàn)證碼超時(shí)"
            );
        }else if($ret == -3){
            $result = array(
                "code"=>"-3",
                "ext"=>"驗(yàn)證碼錯(cuò)誤"
            );
        }

        echo json_encode($result,JSON_UNESCAPED_UNICODE);
    }

    public function reg(){
        if(!(isset($_POST["username"]) 
            && isset($_POST["password"]) 
            && isset($_POST["password2"])
            && $_POST["username"] !== ""
            && $_POST["password"] !== ""
            && $_POST["password2"] !== "")
        ){
            $result = array(
                "code"=>"-1",
                "ext"=>"參數(shù)不能為空"
            );
            echo json_encode($result,JSON_UNESCAPED_UNICODE);
            return;
        }

        $username = $_POST["username"];
        $password = $_POST["password"];
        $password2 = $_POST["password2"];

        if($password !== $password2){
            $result = array(
                "code"=>"-2",
                "ext"=>"兩次密碼不同"
            );
            echo json_encode($result,JSON_UNESCAPED_UNICODE);
            return;
        }

        $salt = coreutil
andom::get_random_string(16);
        $password = md5($password.$salt);
        $data = array(
            "username"=>$username,
            "password"=>$password,
            "salt"=>$salt
        );
        $user = new appmodeluser();
        $ret = $user->find_by_condition(["username"=>$username]);
        if($ret){
            $result = array(
                "code"=>"-2",
                "ext"=>"用戶名已存在"
            );
            echo json_encode($result,JSON_UNESCAPED_UNICODE);
            return;
        }
        $user_id = $user->add($data);
        if($ret >= 1){
            $result = array(
                "code"=>"0",
                "user_id"=>$user_id,
                "ext"=>"注冊(cè)成功"
            );
            echo json_encode($result,JSON_UNESCAPED_UNICODE);
        }
    }

    public function login(){
        if(!(isset($_POST["username"]) 
            && isset($_POST["password"])
            && $_POST["username"] !== ""
            && $_POST["password"] !== "")
        ){
            $result = array(
                "code"=>"-1",
                "ext"=>"參數(shù)不能為空"
            );
            echo json_encode($result,JSON_UNESCAPED_UNICODE);
            return;
        }

        $username = $_POST["username"];
        $password = $_POST["password"];

        $user = new appmodeluser();
        $ret = $user->find_by_condition(["username"=>$username]);
        if($ret){
            $salt = $ret["salt"];
            $req_password = md5($password.$salt);
            $real_password = $ret["password"];
            if($req_password == $real_password){
                session_start();
                $_SESSION["user_id"] = $ret["id"];
                $result = array(
                    "code"=>"0",
                    "ext"=>"登錄成功"
                );
                echo json_encode($result,JSON_UNESCAPED_UNICODE);
            }
        }else{
            $result = array(
                "code"=>"-2",
                "ext"=>"用戶不存在"
            );
            echo json_encode($result,JSON_UNESCAPED_UNICODE);
        }
    }

    public function logout(){
        session_start();
        if(isset($_SESSION["user_id"])){
            unset($_SESSION["user_id"]);
            $result = array(
                "code"=>"0",
                "ext"=>"下線成功"
            );
            echo json_encode($result,JSON_UNESCAPED_UNICODE);
        }    
        
    }

    public function to_login(){
        $this->smarty->assign("basepath",$this->basepath);
        $this->smarty->assign("assets",$this->assets);
        $this->smarty->display("bookmark/user/login.html");
    }
}
前端

如果需要詳細(xì)代碼,請(qǐng)到源碼中查看,下面只描述思路。
1、實(shí)現(xiàn)靜態(tài)頁(yè)面的最終效果,包括html、css和js。
2、把靜態(tài)頁(yè)面改寫為smarty頁(yè)面。
3、使用postman測(cè)試寫好的注冊(cè)登錄接口。
4、打通前后端。

訪問(wèn)地址: http://vkphp.dev/bookmark/use... ,即可看到注冊(cè)登錄頁(yè)面。

源碼分享

https://github.com/voidking/v...

書簽

從零開(kāi)始打造自己的PHP框架

session與PHP之session_start()

PHP session詳解

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/26190.html

相關(guān)文章

  • 從零開(kāi)始打造自己PHP框架——0

    摘要:市場(chǎng)上已經(jīng)有了這么多好的框架,為什么還要開(kāi)發(fā)自己的框架答假裝大神。為了在裝神的道路上走的更遠(yuǎn),小編決定開(kāi)發(fā)一個(gè)自己的框架,命名為。源碼分享書簽從零開(kāi)始打造自己的框架 前言 使用過(guò)thinkphp和yii,涉獵過(guò)shopnc。市場(chǎng)上已經(jīng)有了這么多好的框架,為什么還要開(kāi)發(fā)自己的框架?答:假裝大神。為了在裝神的道路上走的更遠(yuǎn),小編決定開(kāi)發(fā)一個(gè)自己的php框架,命名為vkphp。 原文地址:h...

    妤鋒シ 評(píng)論0 收藏0
  • 從零開(kāi)始打造自己PHP框架――2

    摘要:命名空間的作用解決重名問(wèn)題。不同的命名空間中,可以存在相同類名和函數(shù)名。完全限定名稱,或包含了全局前綴操作符的名稱,例如,或。源碼分享書簽從零開(kāi)始打造自己的框架使用命名空間基礎(chǔ)使用命名空間后備全局函數(shù)常量基礎(chǔ)安裝進(jìn)階安裝 目標(biāo) 本篇,我們來(lái)實(shí)現(xiàn)加載控制器、數(shù)據(jù)查詢和頁(yè)面渲染。 原文地址:http://www.voidking.com/2017/... 加載控制器 控制器 在app目錄下...

    daydream 評(píng)論0 收藏0
  • 從零開(kāi)始打造自己PHP框架——4

    摘要:本篇,我們就在自己的項(xiàng)目中使用來(lái)進(jìn)行依賴管理。輸入,即可安裝依賴到目錄中,并且自動(dòng)生成和。安裝依賴,提示從提示可以看出,讀取的是中的依賴,而不是最新的。訪問(wèn),正常工作。源碼分享書簽從零開(kāi)始打造自己的框架中文網(wǎng)中文文檔 Composer Composer 是 PHP5.3以上 的一個(gè)依賴管理工具。它允許你申明項(xiàng)目所依賴的代碼庫(kù),它會(huì)在你的項(xiàng)目中為你安裝他們。Composer 不是一個(gè)包管...

    madthumb 評(píng)論0 收藏0
  • 從零開(kāi)始打造自己PHP框架——3

    摘要:內(nèi)包含框架的核心文件。在目錄中,新建,內(nèi)容如下判斷文件是否存在判斷配置是否存在沒(méi)有配置項(xiàng)找不到配置文件找不到配置文件配置類在目錄中,新建配置文件和。使用修改目錄中的和。源碼分享書簽從零開(kāi)始打造自己的框架 目標(biāo) 本篇,我們的目標(biāo)有三個(gè): 調(diào)整項(xiàng)目結(jié)構(gòu) 加載配置類 添加日志類 原文地址:http://www.voidking.com/2017/... 調(diào)整項(xiàng)目結(jié)構(gòu) vkphp ├─ap...

    fengxiuping 評(píng)論0 收藏0
  • 從零開(kāi)始打造自己PHP框架——1

    摘要:回調(diào)函數(shù)拿到,然后進(jìn)行文件的引入。支持訪問(wèn)地址,無(wú)法正常獲取控制器方法和參數(shù),修改如下路由控制隱藏獲取中的控制器和方法獲取中的參數(shù)去掉項(xiàng)目名稱去掉源碼分享書簽從零開(kāi)始打造自己的框架檔案引入路徑問(wèn)題 目標(biāo) 本篇,我們來(lái)實(shí)現(xiàn)類庫(kù)自動(dòng)加載,以及路由解析。 原文地址:http://www.voidking.com/2017/... 類庫(kù)自動(dòng)加載 常規(guī)加載 常規(guī)加載一般使用include或者re...

    alanoddsoff 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<