thinkphp5基本的一些操作/API友好/获取请求信息(Request)/判断请求类型(GET...)/验证参数数据(Validate)/连接数据库/原生sql语句查询
文章目錄
- 一、API友好
- 1.舉兩個thinkphp5關于API友好的例子
- (1)數據輸出
- (2)錯誤調試Trace
- 二、獲取請求信息(Request)
- 1.獲取URL信息
- 2.獲取 模塊/控制器/操作名稱
- 3.獲取請求參數(params)
- 4.獲取路由和調度信息
- 三、判斷請求類型(GET/POST/PUT......)
- 四、驗證參數數據
- 五、連接數據庫
- 六、原生SQL語句查詢
一、API友好
官方文檔:https://www.kancloud.cn/manual/thinkphp5/118017
????????API (Application Programming Interface):簡單來說就是應用程序編程接口。
???????我對API友好的理解:指原本一些復雜的操作方法函數,在thinkphp5里面被包裝成類庫,咱們可以更加方便的使用類庫去實現我們想要實現的操作效果。
???????下面引入一位大神對于API的理解 ,我感覺他講解的挺好的。
???????作為一個編程初學者來說,API函數也許是一個時常耳聞卻感覺有些神秘的東西。單看它的復雜語法,就足令人望而生畏,但是任何事物在我們深入了解它之前,總是會有這種感覺的。我們這篇API入門教程的目的,就是要把API函數的來龍去脈告訴大家,破除對API函數的畏懼,使它成為我們編程的好助手。
???????大家可能在許多書上看到過API的英文全稱(Application Programming Interface),WIN32 API也就是MicrosoftWindows 32位平臺的應用程序編程接口。對這個定義的理解,需要追溯到操作系統的發展歷史上,當WINDOWS操作系統開始占據主導地位的時候,開發WINDOWS平臺下的應用程序成為人們的需要。而在WINDOWS程序設計領域處于發展的初期,WINDOWS程序員所能使用的編程工具唯有API函數,這些函數是WINDOWS提供給應用程序與操作系統的接口,他們猶如“積木塊”一樣,可以搭建出各種界面豐富,功能靈活的應用程序。所以可以認為API函數是構筑整個WINDOWS框架的基石,在它的下面是WINDOWS的操作系統核心,而它的上面則是所有的華麗的WINDOWS應用程序。
???????但是,那時的WINDOWS程序開發還是比較復雜的工作,程序員必須熟記一大堆常用的API函數,而且還得對WINDOWS操作系統有深入的了解。然而隨著軟件技術的不斷發展,在WINDOWS平臺上出現了很多優秀的可視化編程環境,程序員可以采用“即見即所得”的編程方式來開發具有精美用戶界面和功能強大的應用程序。
???????這些優秀可視化編程環境操作簡單、界面友好(諸如VB、VC 、DELPHI等),在這些工具中提供了大量的類庫和各種控件,它們替代了API的神秘功能,事實上這些類庫和控件都是構架在WIN32 API函數基礎之上的,是封裝了的API函數的集合。它們把常用的API函數的組合在一起成為一個控件或類庫,并賦予其方便的使用方法,所以極大的加速了WINDOWS應用程序開發的過程。有了這些控件和類庫,程序員便可以把主要精力放在程序整體功能的設計上,而不必過于關注技術細節。
???????實際上如果我們要開發出更靈活、更實用、更具效率的應用程序,必然要涉及到直接使用API函數,雖然類庫和控件使應用程序的開發簡單的多,但它們只提供WINDOWS的一般功能,對于比較復雜和特殊的功能來說,使用類庫和控件是非常難以實現的,這時就需要采用API函數來實現。
???????這也是API函數使用的場合,所以我們對待API函數不必刻意來研究每一個函數的用法,那也是不現實的(能用的到的API函數有幾千個呢)。正如某位大蝦所說:API不要去學,在需要的時候去查API幫助就足夠了。
1.舉兩個thinkphp5關于API友好的例子
(1)數據輸出
<?php namespace app\index\controller; class Index {public function index() {echo "十年磨一劍";echo "<br/>";echo "where: app/index/controller/Index.php/Index->index()";echo "<br/>";$data = ['name'=>'thinkphp','url'=>'thinkphp.cn'];//config.php中設置--->'default_return_type'=>'json'//即可返回json類型的數據return ['data'=>$data,'code'=>1,'message'=>'操作完成1']; // 支持指定json數據輸出return json(['data'=>$data,'code'=>1,'message'=>'操作完成2']);// 支持指定xml數據輸出return xml(['data'=>$data,'code'=>1,'message'=>'操作完成3']);//核心支持的數據類型包括view、xml、json和jsonp,其他類型的需要自己擴展。} }- 運行結果:
(2)錯誤調試Trace
?????? 由于API開發不方便在客戶端進行開發調試,但ThinkPHP5的Trace調試功能支持Socket在內的方式,可以實現遠程的開發調試。
設置方式:
//config.php'app_trace' => true, 'trace' => ['type' => 'socket', // socket服務器'host' => 'slog.thinkphp.cn', ],?????? 然后安裝chrome瀏覽器插件后即可進行遠程調試,詳細參考調試部分。
二、獲取請求信息(Request)
如果要獲取當前的請求信息,可以使用\think\Request類
- $request = Request::instance();//創建一個請求對象調用Request類庫方法來實現相關功能
- $request = request();//還可以使用助手函數
- 官方文檔:https://www.kancloud.cn/manual/thinkphp5/158834
1.獲取URL信息
<?php namespace app\index\controller; use think\Request; class Index {public function index() {$request = Request::instance();// 獲取當前域名echo '當前域名: ' . $request->domain() . '<br/>';// 獲取當前入口文件echo '當前入口文件: ' . $request->baseFile() . '<br/>';// 獲取當前URL地址 不含域名echo '當前URL地址 不含域名: ' . $request->url() . '<br/>';// 獲取包含域名的完整URL地址echo '獲取包含域名的完整URL地址: ' . $request->url(true) . '<br/>';// 獲取當前URL地址 不含QUERY_STRINGecho '獲取當前URL地址 不含QUERY_STRING: ' . $request->baseUrl() . '<br/>';// 獲取URL訪問的ROOT地址echo '獲取URL訪問的ROOT地址:' . $request->root() . '<br/>';// 獲取URL訪問的ROOT地址echo '獲取URL訪問的ROOT地址: ' . $request->root(true) . '<br/>';// 獲取URL地址中的PATH_INFO信息echo '獲取URL地址中的PATH_INFO信息: ' . $request->pathinfo() . '<br/>';// 獲取URL地址中的PATH_INFO信息 不含后綴echo '獲取URL地址中的PATH_INFO信息 不含后綴: ' . $request->path() . '<br/>';// 獲取URL地址中的后綴信息echo '獲取URL地址中的后綴信息: ' . $request->ext() . '<br/>';}}2.獲取 模塊/控制器/操作名稱
<?php namespace app\index\controller; use think\Request; class Index {public function index() {$request = Request::instance();echo "當前模塊名稱是 ". $request->module();echo "<br/>當前控制器名稱是 " . $request->controller();echo "<br/>當前操作名稱是" . $request->action();"<br/>";} }3.獲取請求參數(params)
<?php namespace app\index\controller; use think\Request;class Index {public function index() {$request = Request::instance();echo '請求方法:' . $request->method() . '<br/>';echo '資源類型:' . $request->type() . '<br/>';echo '訪問ip地址:' . $request->ip() . '<br/>';echo '是否AJax請求:' . var_export($request->isAjax(), true) . '<br/>';echo '請求參數:';dump($request->param());echo '請求參數:僅包含name';dump($request->only(['name']));echo '請求參數:排除name';dump($request->except(['name']));}}
4.獲取路由和調度信息
<?php namespace app\index\controller; use think\Request;class Index {public function index() {$request = Request::instance();echo '路由信息:';dump($request->route());echo '調度信息:';dump($request->dispatch());}}三、判斷請求類型(GET/POST/PUT…)
???????在很多情況下面,我們需要判斷當前操作的請求類型是GET、POST、PUT、DELETE或者HEAD,一方面可以針對請求類型作出不同的邏輯處理,另外一方面有些情況下面需要驗證安全性,過濾不安全的請求。
???????ThinkPHP5.0 取消了用于判斷請求類型的系統常量(如IS_GET,IS_POST等),統一采用 think\Request類 處理請求類型。
用法如下:
<?php namespace app\index\controller; use think\Request;class Index {public function index() {$request = Request::instance();// 是否為 GET 請求if ($request->isGet()) echo "當前為 GET 請求";// 是否為 POST 請求if ($request->isPost()) echo "當前為 POST 請求";// 是否為 PUT 請求if ($request->isPut()) echo "當前為 PUT 請求";// 是否為 DELETE 請求if ($request->isDelete()) echo "當前為 DELETE 請求";// 是否為 Ajax 請求if ($request->isAjax()) echo "當前為 Ajax 請求";// 是否為 Pjax 請求if ($request->isPjax()) echo "當前為 Pjax 請求";// 是否為手機訪問if ($request->isMobile()) echo "當前為手機訪問";// 是否為 HEAD 請求if ($request->isHead()) echo "當前為 HEAD 請求";// 是否為 Patch 請求if ($request->isPatch()) echo "當前為 PATCH 請求";// 是否為 OPTIONS 請求if ($request->isOptions()) echo "當前為 OPTIONS 請求";// 是否為 cliif ($request->isCli()) echo "當前為 cli";// 是否為 cgiif ($request->isCgi()) echo "當前為 cgi";}}四、驗證參數數據
<?php namespace app\index\controller; use \think\Validate; class Index {public function index() {$rule = [//驗證規則'name' => 'require|max:25','age' => 'number|between:1,120','email' => 'email',];$msg = [//返回的錯誤信息'name.require' => '名稱必須','name.max' => '名稱最多不能超過25個字符','age.number' => '年齡必須是數字','age.between' => '年齡只能在1-120之間','email' => '郵箱格式錯誤',];$data = input('post.');//http請求方式post$validate = new Validate($rule,$msg);//實例化一個驗證類對象$result = $validate->batch()->check($data);//batch()批量驗證if (!$validate->check($data)) {//檢查post方式傳進的數據是否符合規則dump($validate->getError());//返回錯誤信息$msg}} }五、連接數據庫
database.php/* 數據庫設置 */ 'database' => [// 數據庫類型'type' => 'mysql',// 服務器地址'hostname' => '127.0.0.1',// 數據庫名'database' => 'thinkphp',// 數據庫用戶名'username' => 'root',// 數據庫密碼'password' => '',//自己設置的密碼// 數據庫連接端口'hostport' => '',// 數據庫連接參數'params' => [],// 數據庫編碼默認采用utf8'charset' => 'utf8',// 數據庫表前綴'prefix' => '',// 數據庫調試模式'debug' => false, ],六、原生SQL語句查詢
<?php namespace app\index\controller; use think\Db;//引用Db類庫 class Index {public function index(){$res = Db::query('select version()');dump($res);} }總結
以上是生活随笔為你收集整理的thinkphp5基本的一些操作/API友好/获取请求信息(Request)/判断请求类型(GET...)/验证参数数据(Validate)/连接数据库/原生sql语句查询的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: thinkphp5/phpstudy分析
- 下一篇: 运用HashMap和ArrayList打