第0到5章,咱們完成了一個屬於本身的php框架,麻雀雖小五臟俱全。接下來,咱們使用vkphp框架開發一個迷你項目——書籤收藏。在開發過程當中,也許會遇到不少問題,這時候咱們就能夠對框架進行調整,使之更加完善。php
系統描述:
用戶登陸系統,可以看到本身收藏的書籤,而且能夠對書籤進行增刪改查。css
系統功能:
一、註冊登陸。
二、書籤展現。
三、增刪查改。html
原文連接:http://www.voidking.com/2017/...前端
vkphp ├─app │ ├─ctrl │ │ └─bookmark │ ├─model │ └─smarty │ ├─templates │ │ └─bookmark │ └─templates_c ├─assets ├─config ├─core ├─log └─vendor
咱們編寫業務代碼的位置,主要在app、assets兩個目錄。git
修改vk_user表結構爲:github
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 '低調的用戶', `email` tinytext, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
app/model目錄下,已經有了user.php這個model類。json
<?php namespace app\model; class user extends \core\model{ public function __construct(){ parent::__construct(__CLASS__); } }
app/ctrl/bookmark目錄下,新建user_ctrl.php。後端
<?php namespace app\ctrl\bookmark; class user_ctrl extends \core\render{ public function index(){ echo 'user ctrl'; } public function captcha(){ $captcha = new \core\util\captcha(); $captcha->create(300,80,40); } public function check(){ if(!(isset($_REQUEST['code']) && $_REQUEST['code'] !== '')){ $result = array( 'code'=>'-4', 'ext'=>'驗證碼不能爲空' ); echo json_encode($result,JSON_UNESCAPED_UNICODE); return; } $code = $_REQUEST['code']; $captcha = new \core\util\captcha(); $ret = $captcha->check($code); if($ret == 0){ $result = array( 'code'=>'0', 'ext'=>'驗證成功' ); }else if($ret == -1){ $result = array( 'code'=>'-1', 'ext'=>'請先獲取驗證碼' ); }else if($ret == -2){ $result = array( 'code'=>'-2', 'ext'=>'驗證碼超時' ); }else if($ret == -3){ $result = array( 'code'=>'-3', 'ext'=>'驗證碼錯誤' ); } 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'=>'參數不能爲空' ); 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 = \core\util\random::get_random_string(16); $password = md5($password.$salt); $data = array( 'username'=>$username, 'password'=>$password, 'salt'=>$salt ); $user = new \app\model\user(); $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'=>'註冊成功' ); 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'=>'參數不能爲空' ); echo json_encode($result,JSON_UNESCAPED_UNICODE); return; } $username = $_POST['username']; $password = $_POST['password']; $user = new \app\model\user(); $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'); } }
若是須要詳細代碼,請到源碼中查看,下面只描述思路。
一、實現靜態頁面的最終效果,包括html、css和js。
二、把靜態頁面改寫爲smarty頁面。
三、使用postman測試寫好的註冊登陸接口。
四、打通先後端。php框架
訪問地址: http://vkphp.dev/bookmark/use... ,便可看到註冊登陸頁面。session
https://github.com/voidking/v...