Tp5常用操作
阿新 • • 發佈:2018-11-12
跳轉與重定向
#跳轉 $this->success('驗證成功','User/list');$this->error('失敗');#預設跳轉是返回前一頁(javascript:history.back(-1);) #重定向 #重定向到News模組的Category操作 $this->redirect('News/category', ['cate_id' => 2]); #重定向到指定的URL地址 並且使用302 $this->redirect('http://thinkphp.cn/blog/2',302); #可以在重定向的時候通過session快閃記憶體資料傳值,例如 $this->redirect('News/category', ['cate_id' => 2], 302, ['data' => 'hello']); #使用redirect助手函式還可以實現更多的功能,例如可以記住當前的URL後跳轉 redirect('News/category')->remember(); #需要跳轉到上次記住的URL的時候使用: redirect()->restore();
空操作_empty()
#當用戶輸入一個不存在的方法時呼叫該方法 <?php namespace app\index\controller; class City { public function _empty($name) { //把所有城市的操作解析到city方法 return $this->showCity($name); } //注意 showCity方法 本身是 protected 方法 protected function showCity($name) { //和$name這個城市相關的處理 return '當前城市' . $name; } } http://serverName/index/city/beijing/ http://serverName/index/city/shanghai/ http://serverName/index/city/shenzhen/
空控制器
// 更改預設的空控制器名 'empty_controller' => 'MyError', <?php namespace app\index\controller; use think\Request; class Error { public function index(Request $request) { //根據當前控制器名來判斷要執行那個城市的操作 $cityName = $request->controller(); return $this->city($cityName); } //注意 city方法 本身是 protected 方法 protected function city($name) { //和$name這個城市相關的處理 return '當前城市' . $name; } } http://serverName/index/beijing/ http://serverName/index/shanghai/ http://serverName/index/shenzhen/
獲取url資訊
$request = Request::instance();
// 獲取當前域名
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/>';
#domain: http://tp5.com
#file: /index.php
#url: /index/index/hello.html?name=thinkphp
#url with domain: http://tp5.com/index/index/hello.html?name=thinkphp
#url without query: /index/index/hello.html
#root:
#root with domain: http://tp5.com
#pathinfo: index/index/hello.html
#pathinfo: index/index/hello
#ext: html
設定/獲取 模組/控制器/操作名稱
$request = Request::instance();
echo "當前模組名稱是" . $request->module();
echo "當前控制器名稱是" . $request->controller();
echo "當前操作名稱是" . $request->action();
#設定模組名稱值需要向module方法中傳入名稱即可,同樣使用於設定控制器名稱和操作名稱
Request::instance()->module('module_name');
獲取請求引數
$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']));
獲取路由和排程資訊
$request = Request::instance();
echo '路由資訊:';
dump($request->route());
echo '排程資訊:';
dump($request->dispatch());
設定請求資訊
#如果某些環境下面獲取的請求資訊有誤,可以手動設定這些資訊引數,使用下面的方式:
$request = Request::instance();
$request->root('index.php');
$request->pathinfo('index/index/hello');
檢測變數是否設定
Request::instance()->has('id','get');
Request::instance()->has('name','post');
input('?get.id');
input('?post.name');
獲取變數
#物件獲取,助手函式獲取
// 獲取當前請求的name變數
Request::instance()->param('name');
// 獲取當前請求的所有變數(經過過濾)
Request::instance()->param();
// 獲取當前請求的所有變數(原始資料)
Request::instance()->param(false);
// 獲取當前請求的所有變數(包含上傳檔案)
Request::instance()->param(true);
input('param.name');
input('param.');
或者
input('name');
input('');
Request::instance()->get('id'); // 獲取某個get變數
Request::instance()->get('name'); // 獲取get變數
Request::instance()->get(); // 獲取所有的get變數(經過過濾的陣列)
Request::instance()->get(false); // 獲取所有的get變數(原始陣列)
input('get.id');
input('get.name');
input('get.');
Request::instance()->post('name'); // 獲取某個post變數
Request::instance()->post(); // 獲取經過過濾的全部post變數
Request::instance()->post(false); // 獲取全部的post原始變數
input('post.name');
input('post.');
Request::instance()->put('name'); // 獲取某個put變數
Request::instance()->put(); // 獲取全部的put變數(經過過濾)
Request::instance()->put(false); // 獲取全部的put原始變數
input('put.name');
input('put.');
Request::instance()->request('id'); // 獲取某個request變數
Request::instance()->request(); // 獲取全部的request變數(經過過濾)
Request::instance()->request(false); // 獲取全部的request原始變數資料
input('request.id');
input('request.');
Request::instance()->server('PHP_SELF'); // 獲取某個server變數
Request::instance()->server(); // 獲取全部的server變數
input('server.PHP_SELF');
input('server.');
Request::instance()->session('user_id'); // 獲取某個session變數
Request::instance()->session(); // 獲取全部的session變數
input('session.user_id');
input('session.');
Request::instance()->cookie('user_id'); // 獲取某個cookie變數
Request::instance()->cookie(); // 獲取全部的cookie變數
input('cookie.user_id');
input('cookie.');
變數過濾
// 預設全域性過濾方法 用逗號分隔多個
'default_filter' => 'htmlspecialchars',
Request::instance()->filter('htmlspecialchars');
#支援設定多個過濾方法,例如:
Request::instance()->filter(['strip_tags','htmlspecialchars']),
Request::instance()->get('name','','htmlspecialchars'); // 獲取get變數 並用htmlspecialchars函式過濾
Request::instance()->param('username','','strip_tags'); // 獲取param變數 並用strip_tags函式過濾
Request::instance()->post('name','','org\Filter::safeHtml'); // 獲取post變數 並用org\Filter類的safeHtml方法過濾
Request::instance()->param('username','','strip_tags,strtolower'); // 獲取param變數 並依次呼叫strip_tags、strtolower函式過濾
獲取部分變數
// 只獲取當前請求的id和name變數
Request::instance()->only('id,name');
#或者使用陣列方式
Request::instance()->only(['id','name']);
排除部分變數
// 排除id和name變數
Request::instance()->except('id,name');
或者使用陣列方式
Request::instance()->except(['id','name']);
#支援指定變數型別獲取:
// 排除GET請求的id和name變數
Request::instance()->except(['id','name'],'get');
// 排除POST請求的id和name變數
Request::instance()->except(['id','name'],'post');
更改變數
// 更改GET變數
Request::instance()->get(['id'=>10]);
// 更改POST變數
Request::instance()->post(['name'=>'thinkphp']);
判斷請求型別
use think\facade\Request;
// 是否為 GET 請求
if (Request::instance()->isGet()) echo "當前為 GET 請求";
// 是否為 POST 請求
if (Request::instance()->isPost()) echo "當前為 POST 請求";
// 是否為 PUT 請求
if (Request::instance()->isPut()) echo "當前為 PUT 請求";
// 是否為 DELETE 請求
if (Request::instance()->isDelete()) echo "當前為 DELETE 請求";
// 是否為 Ajax 請求
if (Request::instance()->isAjax()) echo "當前為 Ajax 請求";
// 是否為 Pjax 請求
if (Request::instance()->isPjax()) echo "當前為 Pjax 請求";
// 是否為手機訪問
if (Request::instance()->isMobile()) echo "當前為手機訪問";
// 是否為 HEAD 請求
if (Request::instance()->isHead()) echo "當前為 HEAD 請求";
// 是否為 Patch 請求
if (Request::instance()->isPatch()) echo "當前為 PATCH 請求";
// 是否為 OPTIONS 請求
if (Request::instance()->isOptions()) echo "當前為 OPTIONS 請求";
// 是否為 cli
if (Request::instance()->isCli()) echo "當前為 cli";
// 是否為 cgi
if (Request::instance()->isCgi()) echo "當前為 cgi";
if (request()->isGet()) echo "當前為 GET 請求";
模板賦值
$this->assign([
'name' => 'ThinkPHP',
'email' => '[email protected]'
]);
模板渲染
return $this->fetch('read', ['a'=>'a','b'=>'b']);
模板中引數
// 呼叫Request物件的get方法 傳入引數為id
{$Request.get.id}
// 呼叫Request物件的param方法 傳入引數為name
{$Request.param.name}
// 呼叫Request物件的param方法 傳入引數為user.nickname
{$Request.param.user.nickname}
// 呼叫Request物件的root方法
{$Request.root}
// 呼叫Request物件的root方法,並且傳入引數true
{$Request.root.true}
// 呼叫Request物件的path方法
{$Request.path}
// 呼叫Request物件的module方法
{$Request.module}
// 呼叫Request物件的controller方法
{$Request.controller}
// 呼叫Request物件的action方法
{$Request.action}
// 呼叫Request物件的ext方法
{$Request.ext}
// 呼叫Request物件的host方法
{$Request.host}
// 呼叫Request物件的ip方法
{$Request.ip}
// 呼叫Request物件的header方法
{$Request.header.accept-encoding}
模板中使用函式
{$data.name|md5}
{$create_time|date="y-m-d",###} //預設是第一個引數,如果死第二個使用佔位符
{$name|md5|strtoupper|substr=0,3}
模板使用預設值
{$user.nickname|default="這傢伙很懶,什麼也沒留下"}
模板原樣輸出
{literal}
Hello,{$name}!
{/literal}
檢視中呼叫控制器
href="{:url('控制器/方法')}"