Thinkphp5.0快速入門筆記(3)
- 2019 年 10 月 10 日
- 筆記
學習來源與說明
https://www.kancloud.cn/thinkphp/thinkphp5_quickstart
測試與部署均在windows10下進行學習。
快速入門第三節
獲取當前的請求資訊的四種方案
繼承thinkController
<?php namespace appindexcontroller; use thinkController; class Index extends Controller { public function hello($name = 'World') { // 獲取當前URL地址 不含域名 echo 'url: ' . $this->request->url() . '<br/>'; return 'Hello,' . $name . '!'; } }
訪問介面並傳遞參數:http://127.0.0.1/index/index/hello/name/123,網頁獲取name值為123,輸出了請求的url。
效果:

自動注入請求對象
方法帶入形參
<?php namespace appindexcontroller; use thinkRequest; class Index { public function hello(Request $request, $name = 'World') { // 獲取當前URL地址 不含域名 echo 'url: ' . $request->url() . '<br/>'; return 'Hello,' . $name . '!'; } }
使用助手函數
系統提供的方法
<?php namespace appindexcontroller; class Index { public function hello($name = 'World') { // 獲取當前URL地址 不含域名 echo 'url: ' . request()->url() . '<br/>'; return 'Hello,' . $name . '!'; } }
動態綁定屬性
方便全局調用(未直接示例)
製作Base控制器:
<?php namespace appindexcontroller; use appindexmodelUser; use thinkController; use thinkRequest; use thinkSession; class Base extends Controller { public function _initialize() { $user = User::get(Session::get('user_id')); Request::instance()->bind('user',$user); } }
其它控制器中調用:
<?php namespace appindexcontroller; use appindexcontrollerBase; use thinkRequest; class Index extends Base { public function index(Request $request) { echo $request->user->id; echo $request->user->name; } }
獲取請求變數
參數資訊與輸出:
<?php namespace appindexcontroller; use thinkRequest; class Index { public function hello(Request $request) { echo '請求參數:'; dump($request->param()); echo 'name:'.$request->param('name'); } }
輸入訪問網址:http://127.0.0.1/index/index/hello/name/123/test/ddd
輸出效果:

使用input助手函數代替$request->param()
<?php namespace appindexcontroller; class Index { public function hello() { echo '請求參數:'; dump(input()); echo 'name:'.input('name'); } }
過濾變數
public function hello(Request $request) { echo 'name:'.$request->param('name','World','strtolower'); echo '<br/>test:'.$request->param('test','thinkphp','strtoupper'); }
獲取其它參數
<?php namespace appindexcontroller; use thinkRequest; class Index { public function hello(Request $request) { echo 'GET參數:'; dump($request->get()); echo 'GET參數:name'; dump($request->get('name')); echo 'POST參數:name'; dump($request->post('name')); echo 'cookie參數:name'; dump($request->cookie('name')); echo '上傳文件資訊:image'; dump($request->file('image')); } }
<?php namespace appindexcontroller; use thinkRequest; class Index { public function hello(Request $request) { 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'])); } }
<?php namespace appindexcontroller; use thinkRequest; class Index { public function hello(Request $request,$name = 'World') { // 獲取當前域名 echo 'domain: ' . $request->domain() . '<br/>'; // 獲取當前入口文件 echo 'file: ' . $request->baseFile() . '<br/>'; // 獲取當前URL地址 不含域名 echo 'url: ' . $request->url() . '<br/>'; // 獲取包含域名的完整URL地址 echo 'url with domain: ' . $request->url(true) . '<br/>'; // 獲取當前URL地址 不含QUERY_STRING echo 'url without query: ' . $request->baseUrl() . '<br/>'; // 獲取URL訪問的ROOT地址 echo 'root:' . $request->root() . '<br/>'; // 獲取URL訪問的ROOT地址 echo 'root with domain: ' . $request->root(true) . '<br/>'; // 獲取URL地址中的PATH_INFO資訊 echo 'pathinfo: ' . $request->pathinfo() . '<br/>'; // 獲取URL地址中的PATH_INFO資訊 不含後綴 echo 'pathinfo: ' . $request->path() . '<br/>'; // 獲取URL地址中的後綴資訊 echo 'ext: ' . $request->ext() . '<br/>'; return 'Hello,' . $name . '!'; } }
public function hello(Request $request, $name = 'World') { echo '模組:'.$request->module(); echo '<br/>控制器:'.$request->controller(); echo '<br/>操作:'.$request->action(); }
使用助手函數的示例:
<?php namespace appindexcontroller; class Index { public function hello() { echo 'GET參數:'; dump(input('get.')); echo 'GET參數:name'; dump(input('get.name')); echo 'POST參數:name'; dump(input('post.name')); echo 'cookie參數:name'; dump(input('cookie.name')); echo '上傳文件資訊:image'; dump(input('file.image')); } }
響應對象
自動輸出xml,json等格式的響應
修改默認輸出類型:'default_return_type' => 'json',//或者為xml等(config.php)
然後設計如下控制器:
<?php namespace appindexcontroller; class Index { public function hello() { $data = ['name' => 'thinkphp', 'status' => '1']; return $data; } }
輸出:

手動輸出各種格式響應
不需要配置config.php,直接建立如下控制器即可完成相同輸出。
<?php namespace appindexcontroller; class Index { public function hello() { $data = ['name' => 'thinkphp', 'status' => '1']; return json($data); } }
也可以手動輸出帶狀態返回碼在內的其它資訊的響應格式
<?php namespace appindexcontroller; class Index { public function hello() { $data = ['name' => 'thinkphp', 'status' => '1']; return json($data, 201, ['Cache-control' => 'no-cache,must-revalidate']); } }
頁面跳轉方法
<?php namespace appindexcontroller; class Index { use traitscontrollerJump; public function index($name='') { if ('thinkphp' == $name) { $this->success('歡迎使用ThinkPHP5.0','hello'); } else { $this->error('錯誤的name','guest'); } } public function hello() { return 'Hello,ThinkPHP!'; } public function guest() { return 'Hello,Guest!'; } }
以上程式碼引入的traitscontrollerJump,使用success和error,輸出了表情、提示資訊,然後3秒跳轉到指定的方法。
在traitscontrollerJump中,頁面重定向的方法為:
$this->redirect('http://thinkphp.cn');
直接重新定向到指定頁面。
系統也提供了助手函數有同樣效果:
redirect('http://thinkphp.cn')