天天看點

TP5 變量過濾

參考:TP5 完全開發手冊 輸入變量 變量過濾

TP5架構預設是沒有設定任何過濾規則的,但是可以在配置檔案中設定全局的過濾規則;

// 預設全局過濾方法 用逗号分隔多個
'default_filter'         => 'htmlspecialchars',
           

同時也支援使用

Request

對象進行全局變量的擷取過濾,過濾方式包括函數、方法過濾,以及PHP内置的

Type of filters

,設定全局變量過濾的方法如下:

Request::instance()->filter('htmlspecialchars');

支援多個過濾方法:

Request::instance()->filter(['strip_tags','htmlspecialchars']),

也可以在擷取變量的時候添加過濾方法:

// 擷取get變量 并用htmlspecialchars函數過濾
Request::instance()->get('name','','htmlspecialchars'); 

// 擷取param變量 并用strip_tags函數過濾
Request::instance()->param('username','','strip_tags'); 

// 擷取post變量 并用org\Filter類的safeHtml方法過濾
Request::instance()->post('name','','org\Filter::safeHtml'); 

//支援傳入多個過濾規則
// 擷取param變量 并依次調用strip_tags、strtolower函數過濾
Request::instance()->param('username','','strip_tags,strtolower'); 

//Request對象還支援PHP内置提供的Filter ID過濾,例如:
Request::instance()->post('email','',FILTER_VALIDATE_EMAIL);
//架構對FilterID做了轉換支援,是以也可以使用字元串的方式,例如:
Request::instance()->post('email','','email');
           

采用字元串方式定義FilterID的時候,系統會自動進行一次filter_id調用轉換成Filter常量。

具體的字元串根據

filter_list

函數的傳回值來定義。

需要注意的是,采用Filter ID 進行過濾的話,如果不符合過濾要求的話 會傳回false,是以你需要配合預設值來確定最終的值符合你的規範。
//如果不是規範的email位址的話 傳回空字元串。
Request::instance()->post('email','',FILTER_VALIDATE_EMAIL);

//如果目前不需要進行任何過濾的話,可以使用
/ 擷取get變量 并且不進行任何過濾 即使設定了全局過濾
Request::instance()->get('name','',null); 
           

擷取部分變量

如果你隻需要擷取目前請求的部分參數,可以使用:

// 隻擷取目前請求的id和name變量
Request::instance()->only('id,name');

// 數組方式:隻擷取目前請求的id和name變量
Request::instance()->only(['id','name']);

//預設擷取的是目前請求參數,如果需要擷取其它類型的參數,可以使用第二個參數,例如:
// 隻擷取GET請求的id和name變量
Request::instance()->only(['id','name'],'get');
// 隻擷取POST請求的id和name變量
Request::instance()->only(['id','name'],'post');
           

排除部分變量

支援排除某些變量擷取,例如

// 排除id和name變量
Request::instance()->except('id,name');

// 數組方式:排除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');