對thinkphp5.0框架的實例學習

  不管是滲透測試仍是代碼審計的過程當中會碰到用不一樣的框架搭建起來的網站,熟悉這些框架的基本原理,會幫助咱們快速的理解漏洞原理,提升幹活效率,因此本身本地搭了個php環境,來入門實例學習下thinkphp5.0框架。php

 1、基本概念理解

  (1)MVC結構html

  控制器(Controller)- 負責轉發請求,對請求進行處理。程序員

  視圖(View) - 界面設計人員進行圖形界面設計。算法

  模型(Model) - 程序員編寫程序應有的功能(實現算法等等)、數據庫專家進行數據管理和數據庫設計(能夠實現具體的功能)。thinkphp

  上面三個概念是wiki的解釋,個人簡單理解就是Controller用來轉發請求,View用來顯示界面,Model用來聯繫數據庫,Controller就是view和Model的中轉站。數據庫

  (2)命名空間瀏覽器

  (PHP 5 >= 5.3.0, PHP 7)
  從廣義上來講,命名空間是一種封裝事物的方法。在不少地方均可以見到這種抽象概念。例如,在操做系統中目錄用來將相關文件分組,對於目錄中的文件來講,它就扮演了命名空間的角色。具體舉個例子,文件foo.txt 能夠同時在目錄/home/greg 和 /home/other 中存在,但在同一個目錄中不能存在兩個 foo.txt 文件。另外,在目錄 /home/greg 外訪問 foo.txt 文件時,咱們必須將目錄名以及目錄分隔符放在文件名以前獲得/home/greg/foo.txt。這個原理應用到程序設計領域就是命名空間的概念。這是官網的解釋,感受挺清楚的就直接粘過來了。安全

  think  ==> ./thinkphp/library/think       (系統核心類庫)

  traits ==> ./thinkphp/library/traits     (系統Trait類庫)

  app ==> ./application          (應用類庫)app

  (3)目錄概述框架

 2、簡單實例

  數據庫中的數據以下圖:

  

  (1)控制器

  將index模塊的Index控制器類(文件位置位於.\application\index\controller\Index.php)的hello方法修改成讀取數據代碼,代碼以下:

<?php
namespace app\index\controller;

use think\Controller;    //文件位置在.\thinkphp\library\think\Controller.php
use think\Db;

class Index extends Controller
{
    public function hello()
    {
        $data = Db::name('data')->find();
        $this->assign('results', $data);
        return $this->fetch();
    }
}

  (2)視圖

  在application\index\view\index下建立hello.html文件,代碼以下:

<html>
<head>
<title></title>
</head>
<body>
    {$results.id}--{$results.data}
</body>
</html>

  (3)運行結果

  

 3、url和路由

  (1)URL訪問

  thinkphp採用單一入口模式訪問應用,對應用的全部請求都定向到應用的入口文件。標準的URL訪問格式爲:

  http://serverName/index.php/模塊/控制器/操做

  模塊名強制爲小寫。

  若是控制器是駝峯的,則要用下劃線的方式訪問,測試結果以下

  

  (2)路由

  

  運行結果以下圖:

  

 4、請求和響應

  thinkphp新增了request請求對象和reponse響應對象的概念。

  (1)Request對象的一個主要職責是統一和更安全地獲取請求的變量,用它提供的方法來代替$_GET 、$_POST 、 $_REQUEST 、 $_SESSION 、 $_COOKIE 、以及$_FILES 等全局變量,代碼示例以下:

  

<?php
namespace app\index\controller;

use think\Request;

class index
{
    public function hello(Request $request, $name = 'World')
    {
        echo '路由信息: ';
        dump($request->routeInfo());
        echo 'url: ' . $request->url() . '<br/>';  //自動注入方式
        return 'Hello,' . $name . '!';
    }
}

 

  運行結果以下圖:

  

  (2)Response對象用於輸出數據給客戶端或者瀏覽器。

  大多數狀況,咱們不須要關注 Response 對象自己,只須要在控制器的操做方法中返回數據便可。代碼示例以下:

<?php
namespace app\index\controller;

class index
{
    public function hello($name = 'World')
    {
        $data = ['name' => 'thinkphp', 'status' => '1'];
        return xml($data,201);
    }
}

  返回結果以下圖:

  

 5、3.2和5.0的主要區別

  (1)5.0 的URL訪問再也不支持普通 URL 模式,路由也不支持正則路由定義,而是所有改成規則路由配合變量規則;

  (2)5.0新增了請求對象Request和響應對象 Response;

  (3)5.0的數據庫查詢功能加強,原先須要經過模型才能使用的鏈式查詢能夠直接經過Db類調用,原來的M函數調用能夠改用db函數;

  其餘區別沒列出,本身感受不是過重要。

  6、小結

  以上就是本身的學習過程,不對的地方還請指教。

相關文章
相關標籤/搜索