PHP-thinkPHP快速入門
1.教程大綱
這是一篇零基礎的thinkPHP教程,全篇看完只需要要一個小時,通過一個簡單的網站,我會由點到面的講述
a.基礎的講述thinkPHP的路由、請求、響應、模板的渲染。
b.如何在thinkPHP框架下實現MVC的設計模式,三層架構之間的跳轉和引用。
c.如何通過原生的SQL語句或者是通過繼承model類封裝的方法實現對於資料庫的增刪改查。
2.網站demo
a.登入(主要是對於資料庫的查詢)
b.註冊(主要是對於資料庫的插入)
c.編輯(主要是對於資料庫的更新和刪除)
網站原始碼下載連線
這裡我們建議讀者先下載解壓原始碼,執行程式碼後對於頁面功能有了基礎的瞭解後,再結合下面的教程內容,快速瞭解thinkPHP框架。
3.MVC
思索再三我還是決定先簡單說一下,thinkPHP的MVC框架。
首先是view層,我們看到在application下面有我們建立的admin應用,下面有view檔案件,這裡便放置著我們需要渲染在頁面上的html檔案。其實,這便是我們網站裡面的基礎頁面,只不過我們沒有放到public目錄下,而是通過view層封裝,方便我們的controller層進行呼叫。
其次是controller層,thinkPHP框架中用來處理業務邏輯的程式碼部分,承當著接受頁面請求,返回響應的責任。控住層連線了實體層和檢視層,是網站開發的主體部分。controller層的位置和我們的view層是並列的。
最後是model層,主要是負責對映資料庫中的表,可以用來封裝從資料庫中取出的值,還可以封裝一些頻繁使用的方法,例如從狀態碼到實際含義的轉換。客觀的說,對於一些簡單的資料庫訪問來說,其實model層不是必須的,後面我們在SQL增刪改查裡面會講到使用thinkPHP封裝好的原生的查詢語句,但是model層的實現其實更好方便了我們對於批量資料的處理。
3.基礎的路由、請求、響應、模板渲染。
a.路由
首先,路由是用來簡化URL訪問時的連結,通過路由規則來控制使用者的訪問。
'/'=> 'admin/login/login',
舉例,我們在application目錄下開啟router.php檔案,新增這樣的一行,就是告訴瀏覽器,當用戶在URL後面追加‘/’作為訪問路徑時,我們就訪問’admin/login/login’這個方法。
b.請求
處理業務邏輯時,我們不可避免的產生,前後端的互動,這便需要用請求來告訴後端需要做那些處理。
$.ajax({
type: "get",
url: "admin/login/loginpost",
async: true,
data: {
'name': name,
'pwd': pwd
},
success: function(data) {
if(data == "0") {
window.location.href = "admin/edit/editget"
} else {
alert("請檢查使用者名稱和密碼!")
}
},
error: function() {
alert("伺服器出錯了")
}
});
我們看這個ajax裡面的請求,就是在登入是前端傳送給後端的密碼驗證請求。
c.響應
響應是對於頁面請求的回覆,這裡我們需要對於資料進行增刪改查的操作,根據處理的結果對頁面進行回覆。
//判斷登入
public function loginpost(Request $request){
//獲取頁面登入頁面的資料
$name = $request->param("name");
$pwd = $request->param("pwd");
//通過查詢資料庫來驗證是否正確登入
$admin = Admin::get($name);
if(!$admin||$admin['pwd']!=$pwd){
//驗證失敗
return json("name or pwd has error");
}else{
//驗證成功 寫入session
Session::set('name',$name);
Session::set('pwd',$pwd);
return json("0");
}
}
如上,便是對於上面登入請求的一個響應,承接到上面,請求收到回覆後便會對於結果進行處理。
d.模板渲染
上面我們說過,對於頁面模板的渲染通常是由控制層進行呼叫,但是這裡需要注意,每個controller層裡面的php檔案都是對應相應的view,比如你在index.php控制類中呼叫return view(‘login’);的方法,控制類會預設從對應的view/index目錄下面中index.html,這意味中,如果需要進行頁面跳轉,就需要修改訪問路徑。
這裡,我們只是進行提示,而不會給出詳細舉例,因為通過檢視報錯資訊可以很輕易的解決這個問題,然後這個問題可以是各位更好的理解thingPHP框架。
5.mysql 增刪改查
a.插入
檢視詳細的上下文,可以參照register.php檔案
對於原生的SQL語句,需要引入thinkPHP的Db類。
//sql insert 原生SQL語句
$sql = "insert into tb_admin values(\"".$name."\",\"".$pwd."\");";
$result =Db::execute($sql);
if($result){
Session::set('name',$name);
Session::set('pwd',$pwd);
return json("0");
}
else{
return json("1");
}
你也可以使用model層進行例項化,進行插入。
//sql insert model method
$admin = new Admin;
$admin->name = $name;
$admin->pwd =$pwd;
if($admin->save()){
Session::set('name',$name);
Session::set('pwd',$pwd);
return json("0");
}
else{
return json("1");
}
b.刪除
檢視詳細的上下文,可以參照edit.php檔案
//sql delete 原生SQL語句
$sql = "delete from tb_admin where name = \"".$name."\"";
$result =Db::execute($sql);
if($result){
session_start();
session_destroy();
return json("0");
}
else{
return json("1");
}
//sql delete model method
$admin = Admin::get($name);
if($admin->delete()){
session_start();
session_destroy();
return json("0");
}
else{
return json("1");
}
c.更新操作
檢視詳細的上下文,可以參照edit.php檔案。
//sql update 原生SQL語句
$sql = "update tb_admin set pwd =\"".$newpwd."\" where name =\"".$name."\"";
$result =Db::execute($sql);
if($result){
Session::set('pwd',$newpwd);
return json("0");
}
else{
return json("1");
}
//sql update model method
$admin = Admin::get($name);
$admin->pwd = $newpwd;
if($admin->save()){
Session::set('pwd',$newpwd);
return json("0");
}
else{
return json("1");
}
d.查詢操作
檢視詳細的上下文,參照login.php檔案
// //sql select model method
// $admin = new Admin;
// $admin = $admin->where('name',$name)->find();
$admin = Admin::get($name);
if(!$admin||$admin['pwd']!=$pwd){
return json("name or pwd has error");
}else{
Session::set('name',$name);
Session::set('pwd',$pwd);
return json("0");
}
下面的方法原生的SQL語句,可以通過value的方法獲取對應的值。
//sql select value
$adminpwd = Db::name('tb_admin')
->where('name',$name)
->value('pwd');
if($pwd!=$adminpwd){
return json("name or pwd has error");
}
else{
Session::set('name',$name);
Session::set('pwd',$pwd);
return json("0");
}
下面的也是原生的SQL方法,不過是通過column的方法來獲取多列的值。
//sql select column
//當column只有一列時,索引為數字
//當column有很多列時,索引預設為主鍵,只可以顯示的申明主鍵為索引
$result = Db::name('tb_admin')
->where("name",$name)
->column('pwd');
if($result[0]!=$pwd){
return json("name or pwd has error");
}
else{
Session::set('name',$name);
Session::set('pwd',$pwd);
return json("0");
}
e.批量操作
下面的也是查詢操作,不過是對於資料的批量查詢,然後分頁顯示,是一個非常使用的方法。
//獲取所有登入使用者資訊
$list = Admin::paginate(3);
$this->assign('list',$list);
$this->assign('count',count($list));
最後,如果有建議和錯誤,可以在評論區指出,會及時更新。