1. 程式人生 > >Tp5常用操作

Tp5常用操作

跳轉與重定向

#跳轉
$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('控制器/方法')}"