1. 程式人生 > >PHP-thinkPHP快速入門

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));

最後,如果有建議和錯誤,可以在評論區指出,會及時更新。