本文通過完整代碼示例,演示如何在 ThinkPHP 框架中實現用戶註冊、登錄、登出及留言發布/管理功能。重點講解模型實例化、自動驗證、Cookie 處理及 CRUD 操作的核心邏輯。
<?php
class UserAction extends Action {
// 用戶註冊處理
public function add() {
$user = D("user"); // 必須用 D() 實例化模型以啟用自動驗證
$user->create();
$result = $user->add();
if ($result) {
$this->assign("jumpUrl", "__APP__/index/index");
$this->success('註冊成功!');
} else {
$this->assign("jumpUrl", "__APP__/user/register");
$this->error($user->getError());
}
}
public function register() { $this->display(); }
public function login() { $this->display(); }
// 登錄驗證
public function checklogin() {
$username = $_POST['username'];
$passwd = $_POST['passwd'];
$user = D("user");
$userinfo = $user->where("username='$username'")->find();
if (!empty($userinfo)) {
if ($userinfo['passwd'] == $passwd) {
Cookie::set('userid', $userinfo['id'], time()+3600*24);
Cookie::set('username', $username, time()+3600*24);
Cookie::set('lastlogintime', time(), time()+3600*24);
$this->assign("jumpUrl", "__APP__/index/index");
$this->success('登陸成功!');
} else {
$this->assign("jumpUrl", "__APP__/user/login");
$this->error('密碼錯誤,請重新輸入!');
}
} else {
$this->assign("jumpUrl", "__APP__/user/login");
$this->error('用戶名不存在!');
}
}
// 登出
public function loginout() {
Cookie::delete('username');
Cookie::delete('lastlogintime');
$this->assign("jumpUrl", "__APP__/index/index");
$this->success('您已成功退出,歡迎下次登錄!');
}
}
?>
<?php
class IndexAction extends Action {
// 發布留言
public function insert() {
$content = new ContentModel();
if (!$content->create()) {
$this->assign("jumpUrl", "__URL__/index");
$this->error($content->getError());
} else {
$content->userid = Cookie::get('userid');
$content->add();
$this->assign("jumpUrl", "__URL__/index");
$this->success('添加成功!');
}
}
// 留言列表
public function index() {
$content = new ContentModel();
$list = $content->findAll();
$this->assign('list', $list);
$this->assign('username', Cookie::get('username'));
$this->assign('lastlogintime', Cookie::get('lastlogintime'));
$this->assign('title', '我的首頁');
$this->display();
}
// 刪除留言
public function delete() {
$content = new ContentModel();
$id = $_GET['id'];
if ($content->where("id=$id")->delete()) {
$this->assign("jumpUrl", "__URL__/index");
$this->success('刪除成功!');
} else {
$this->assign("jumpUrl", "__URL__/index");
$this->error('刪除失敗!');
}
}
// 編輯留言
public function edit() {
$content = new ContentModel();
$id = $_GET['id'];
if ($id) {
$data = $content->where("id=$id")->select();
if (!empty($data)) $this->assign('data', $data);
}
$this->assign('title', '編輯頁面');
$this->display();
}
// 更新留言
public function update() {
$content = new ContentModel();
$id = $_POST['id'];
if ($id) {
$data['id'] = $id;
$data['title'] = $_POST['title'];
$data['content'] = $_POST['content'];
if ($content->save($data)) {
$this->assign("jumpUrl", "__URL__/index");
$this->success('更新數據成功!');
} else {
$this->assign("jumpUrl", "__URL__/index");
$this->error('更新數據失敗!');
}
} else {
echo "保存數據失敗!";
}
}
}
?>
<?php
class ContentModel extends Model {
protected $_validate = array(
array('title', 'require', '標題必須填寫!'),
array('content', 'require', '內容必須填寫!'),
);
protected $_auto = array(
array('addtime', 'time', 1, 'function'), // 寫入時自動填充當前時間戳
);
}
?>
<?php
class UserModel extends Model {
protected $_validate = array(
array('username', '', '帳號名稱已經存在!', 0, 'unique', 1),
);
}
?>
D("user") 實例化模型;M() 僅用於無模型類的表操作,無法觸發驗證。array(字段, 規則, 提示, 條件, 附加規則, 時間)array(字段, 內容, 條件, 類型),如時間戳自動生成<!DOCTYPE html>
<html><head>
<meta http-equiv="refresh" content="2; url='{$jumpUrl}'" />
<title>信息提示</title></head><body>
<div id="man_zone"><table width="40%" border="1" align="center" class="table">
<tr><th>信息提示</th></tr>
<tr><td><p>{$message}<br/>2秒後返回<a href="{$jumpUrl}">指定頁面</a></p></td></tr>
</table></div></body></html>
此示例展示了 ThinkPHP 早期版本(3.x 風格)的經典 MVC 開發模式,理解其核心機制對維護老專案或學習框架演進極有幫助。