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