ホームページ  >  記事  >  PHPフレームワーク  >  thinkphp i メソッド

thinkphp i メソッド

藏色散人
藏色散人オリジナル
2019-08-19 14:12:532020ブラウズ

thinkphp i メソッド

thinkphp i メソッド

ThinkPHP の I メソッドは、バージョン 3.1.3 の新機能です。 3.* バージョンでは、3.1 クイック スタート チュートリアル シリーズの変数セクションを直接参照できます。

概要

ご覧のとおり、I メソッドは ThinkPHP の多数の 1 文字関数の新しいメンバーであり、その名前は英語の入力 (input)、これは主に、システム入力変数をより便利かつ安全に取得するために使用されます。どこでも使用できます。使用形式は次のとおりです:

I('变量类型.变量名',['默认值'],['过滤方法'])

変数タイプは、次のようなリクエスト メソッドまたは入力タイプを指します:

thinkphp i メソッド

#注: 変数の型では大文字と小文字が区別されません。

変数名では大文字と小文字が厳密に区別されます。

デフォルト値とフィルタリング方法はオプションのパラメータです。

使用法

I メソッドの使用法を説明するために、GET 変数タイプを例として取り上げます:

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

If the current request typeが GET の場合、$_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')

変数フィルタリング

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 パラメータを設定してフィルタリングを設定することもできます。実際、このパラメータのデフォルト設定は次のとおりです:

'DEFAULT_FILTER'        => 'htmlspecialchars'

つまり、I メソッドのすべての取得変数は htmlspecialchars によってフィルタリングされ、次に :

I('get.name'); // 等同于 htmlspecialchars($_GET['name'])

同様に、このパラメーターは複数のフィルターもサポートできます。例:

'DEFAULT_FILTER'        => 'strip_tags,htmlspecialchars'
I('get.name'); // 等同于 htmlspecialchars(strip_tags($_GET['name']))

I メソッドの使用時にフィルター方法を指定すると、DEFAULT_FILTER 設定は無視されます。例:

echo I('get.name','','strip_tags'); // 等同于 strip_tags($_GET['name'])

I メソッドの 3 番目のパラメータが関数名で渡された場合、関数を呼び出して変数をフィルタリングしてそれを返すことを意味します (変数が配列の場合、フィルタリングには array_map が自動的に使用されます)。それ以外の場合は、フィルタリングに array_map が自動的に使用されます。フィルタリング処理のために PHP の組み込みの filter_var メソッドを呼び出します。例:

I('post.email','',FILTER_VALIDATE_EMAIL);

は、$_POST['email'] の形式が検証されることを意味します。要件を満たさない場合は、空の文字列が返されます。戻ってきた。

(その他の検証形式については、filter_var の使用に関する公式マニュアルを参照してください。)

または、次の文字識別を使用することもできます:

I('post.email','','email');

サポートされるフィルター名は次のとおりです。 filter_list メソッドの有効な値 (サーバー環境が異なると異なる場合があります)。サポートされる可能性のあるものは次のとおりです:

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

特殊なケースでは、DEFAULT_FILTER に何らかの設定がある場合でも、フィルタリングを実行したくない場合があります。 use:

I('get.name','',NULL);

フィルタリング パラメータが NULL に設定されると、フィルタリングは実行されないことになります。

この記事は、ThinkPHP フレームワークの技術記事コラムからのものです:

http://www.php.cn/phpkj/thinkphp/

以上がthinkphp i メソッドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。