ThinkPHP の I メソッドは、多くの単一文字関数の中で新しいメンバーであり、主にシステム入力変数をより便利かつ安全に取得するために使用され、どこでも使用できます。この記事では主に ThinkPHP の I メソッドを紹介します。必要な方は参考にしてください。
ThinkPHP の I メソッドは、英語の Input (入力) から来ています。システム入力変数を取得する方が便利かつ安全であり、使用形式は次のとおりです。
I('変数の種類.変数名',['デフォルト値'。 ],['フィルター メソッド'])
変数タイプは、リクエスト メソッドまたは入力タイプを指します。
#変数の種類 | 意味 |
get | GET パラメータの取得 |
post | POST パラメータの取得 |
param | GET、POST、または PUT パラメータを取得するリクエスト タイプを自動的に決定します |
request | REQUEST パラメータの取得 |
#put
PUT パラメータの取得 |
| #session
$_SESSION パラメータの取得 |
#cookie | $_COOKIE パラメータの取得 |
server | $_SERVER パラメータの取得 |
globals | $GLOBALS パラメータの取得 |
注: 変数の型では大文字と小文字が区別されません。
変数名では大文字と小文字が厳密に区別されます。
デフォルト値とフィルタリング方法はオプションのパラメータです。
1. 使用法:
GET 変数タイプを例として、I メソッドの使用法を説明します。
##
echo I('get.id'); // 相当于 $_GET['id']
echo I('get.name'); // 相当于 $_GET['name']
ログイン後にコピー
#サポートデフォルト値:
echo I('get.id',0); // 如果不存在$_GET['id'] 则返回0
echo I('get.name',''); // 如果不存在$_GET['name'] 则返回空字符串
ログイン後にコピー
# 方法によるフィルター: echo I('get.name','','htmlspecialchars'); // 采用htmlspecialchars方法对$_GET['name'] 进行过滤,如果不存在则返回空字符串
ログイン後にコピー
変数タイプ全体の直接取得をサポートします。例: I('get.'); // 获取整个$_GET 数组
ログイン後にコピー
同様に、post または他の入力タイプの変数を取得できます。例: I('post.name','','htmlspecialchars'); // 采用htmlspecialchars方法对$_POST['name'] 进行过滤,如果不存在则返回空字符串
I('session.user_id',0); // 获取$_SESSION['user_id'] 如果不存在则默认为0
I('cookie.'); // 获取整个 $_COOKIE 数组
I('server.REQUEST_METHOD'); // 获取 $_SERVER['REQUEST_METHOD']
ログイン後にコピー
param 変数のタイプはフレームワーク固有です。現在のリクエスト タイプの自動決定をサポートする変数。例: echo I('param.id');
ログイン後にコピー
現在のリクエスト タイプが GET の場合、これは次のようになります。現在のリクエスト タイプが POST または PUT の場合、$_GET['id'] と同等です。POST または PUT の場合、$_POST['id'] または PUT パラメータ ID を取得することと同等です。 また、param 型変数では、数値インデックスを使用して URL パラメータを取得することもできます (PATHINFO モード パラメータは、GET か POST かに関係なく有効である必要があります)。例:
現在のアクセス URL アドレスは http: //serverName/index.php/New/2013/06/01
そうすれば、
echo I('param.1'); // 输出2013
echo I('param.2'); // 输出06
echo I('param.3'); // 输出01
ログイン後にコピー
実際には、 param 変数型の記述方法は、I('id'); // 等同于 I('param.id')
I('name'); // 等同于 I('param.name')
ログイン後にコピー
##2 のように簡略化できます。 I メソッド 変数は実際に 2 つのフィルタを通過します。1 つはグローバル フィルタリングです。グローバル フィルタリングは、VAR_FILTERS パラメータを設定することによって行われます。バージョン 3.1 以降、VAR_FILTERS パラメータのフィルタリング メカニズムは再帰的フィルタリングに変更されたことに注意してください。 array_walk_recursive メソッドを使用します。これは主に次の目的で使用されます。フィルタリング メソッドの要件は参照によって返される必要があるため、ここでの htmlspecialchars の設定は無効です。たとえば、 のようにメソッドをカスタマイズできます。
function filter_default(&$value){
$value = htmlspecialchars($value);
}
ログイン後にコピー
そして次のように設定します:
'VAR_FILTERS'=>'filter_default'
ログイン後にコピー
複数回フィルタリングする必要がある場合は、次を使用できます。 :
#'VAR_FILTERS'=>'filter_default,filter_exp'
ログイン後にコピー
filter_exp メソッドは、フレームワークに組み込まれたセキュリティ フィルタリング メソッドであり、モデルの EXP 関数を使用したインジェクション攻撃を防ぐために使用されます。 。
VAR_FILTERS パラメータはグローバル フィルタリング メカニズムを設定し、効率に影響する再帰的フィルタリングを使用するため、パラメータ設定フィルタリング メソッドに加えて I メソッドの 3 番目のステップを除き、変数を直接フィルタリングすることをお勧めします。 DEFAULT_FILTER パラメータを設定してフィルタリングを設定することもできます。実際、このパラメータのデフォルト設定は次のとおりです。 I メソッドのすべての取得変数は htmlspecialchars によってフィルタリングされ、その後:
'DEFAULT_FILTER' => 'htmlspecialchars'
ログイン後にコピー
同様に、このパラメータは複数のフィルタもサポートできます。例:
I('get.name'); // 等同于 htmlspecialchars($_GET['name'])
ログイン後にコピー
'DEFAULT_FILTER' => 'strip_tags,htmlspecialchars'
ログイン後にコピー
I メソッドを使用するときにフィルタリング方法を指定する場合、設定はDEFAULT_FILTER のパラメータは無視されます。例: I('get.name'); // 等同于 htmlspecialchars(strip_tags($_GET['name']))
ログイン後にコピー
I メソッドの 3 番目のパラメータが関数名で渡される場合、それは、関数が呼び出される 変数はフィルタリングされて返されます (変数が配列の場合、フィルタリングには array_map が自動的に使用されます)。それ以外の場合は、フィルタリングのために PHP の組み込みの filter_var メソッドが呼び出されます。例: echo I('get.name','','strip_tags'); // 等同于 strip_tags($_GET['name'])
ログイン後にコピー
は、$_POST['email'] の形式が検証され、要件を満たしていない場合は空の文字列が返されることを意味します。
(その他の検証形式については、filter_var の使用に関する公式マニュアルを参照してください。) または、次の文字識別を使用することもできます:
I('post.email','',FILTER_VALIDATE_EMAIL);
ログイン後にコピー
サポートされるフィルター名は、filter_list メソッドで有効な値である必要があります (サーバー環境が異なると、サポートされるフィルター名が異なる場合があります):
I('post.email','','email');
ログイン後にコピー
一部の特殊なケースでは、DEFAULT_FILTER が設定されている場合でも、フィルタリングを実行したくない場合があります。
int
boolean
float
validate_regexp
validate_url
validate_email
validate_ip
string
stripped
encoded
special_chars
unsafe_raw
email
url
number_int
number_float
magic_quotes
callback
ログイン後にコピー
# を使用できます。 # #フィルタリング パラメータが NULL に設定されると、フィルタリングは実行されないことになります。 上記がこの記事の全内容です。その他の関連コンテンツについては、PHP 中国語 Web サイトをご覧ください。
関連する推奨事項:
Thinkphp での unique の使用
##