ホームページ  >  記事  >  バックエンド開発  >  Thinkphp 一文字関数の使用ガイド_php のヒント

Thinkphp 一文字関数の使用ガイド_php のヒント

WBOY
WBOYオリジナル
2016-05-16 09:00:201821ブラウズ

方法 A

メソッドを使用して内部でコントローラをインスタンス化し、次の形式を呼び出します: A('[project://][group/]module','controllerlayer name')
最も簡単な使用法:

コードをコピー コードは次のとおりです。
$User = A('User');

は、現在のプロジェクトの UserAction コントローラーをインスタンス化することを意味します (このコントローラーに対応するファイルは、Lib/Action/UserAction.class にあります。) グループ モードが採用されており、別の Admin グループ コントローラーをインスタンス化したい場合は、次のようにすることができます。使用:

コードをコピー コードは次のとおりです:
$User = A('Admin/User') ;
div>

プロジェクト間のインスタンス化もサポートされています (プロジェクト ディレクトリは同じレベルに維持する必要があります)

コードをコピー コードは次のとおりです。
$User = A('Admin://User ');

Admin プロジェクトでの UserAction コントローラーのインスタンス化を表します
バージョン .1 では階層型コントローラのサポートが追加されているため、A メソッドを使用して他のコントローラをインスタンス化することもできます。

コードをコピー コードは次のとおりです。
$User = A('User','Event );

UserEvent コントローラーをインスタンス化します (対応するファイルは Lib/Event/UserEvent.class にあります)。
コントローラーをインスタンス化した後、コントローラー内のメソッドを呼び出すことができますが、プロジェクトをまたがって呼び出す場合、操作メソッドが現在のコントローラーに対して特殊な変数操作を持っている場合、不明な点がいくつかあることに注意してください。パブリック呼び出しを必要とするコントローラー層は、依存関係が多すぎないように個別に開発することをお勧めします。

方法 B

これは、動作とともに発生し、次のような特定の動作を実行できる新しい関数です。

コードをコピー コードは次のとおりです:
B('app_begin');

> つまり、プロジェクトが開始される前に、この動作で定義されたすべての関数が実行されます。 2 つのパラメータをサポートします。2 番目のパラメータは、たとえば配列を受け入れる必要があります。

コードをコピー コードは次のとおりです。
B('app_begin',array("name" =& gt ;"tdweb","time"=>time()));

方法 C

方法 C は、Think が構成パラメーターを設定、取得、保存するために使用する方法であり、より頻繁に使用されます。
C メソッドを理解するには、まず Think の構成を理解する必要があります。これは、C メソッドのすべての操作が構成に関連しているためです。 Thinkの設定ファイルは配列形式で定義されています。
関数のオーバーロード設計のため、使用方法がたくさんありますが、一つずつ説明していきます。
パラメータを設定する

コードをコピー コードは次のとおりです。
C('DB_NAME','think');

DB_NAME 設定パラメータの値が think に設定されていることを示します。設定パラメータでは大文字と小文字が区別されないため、次の記述方法は同じです。

コードをコピー コードは次のとおりです。
C('db_name','think');

ただし、構成定義の仕様書は大文字で統一することを推奨します。
プロジェクトのすべてのパラメータは、有効になる前にこのメソッドを通じて動的に変更できます。最後に設定された値は、従来の構成内の以前の設定または定義を上書きします。また、パラメータ構成メソッドを使用して、新しい構成を追加することもできます。
次のような二次構成パラメータの設定をサポートします。

コードをコピー コードは次のとおりです。
C('USER.USER_ID',8);

レベル 2 を超えてパラメータを設定することはお勧めできません。
複数のパラメータを設定する場合は、次のようなバッチ設定を使用できます。

コードをコピー コードは次のとおりです。
$config['user_id'] = 1; $config['user_type'] = 1;
C($config);

C メソッドの最初のパラメータが配列に渡される場合、それはバッチ割り当てを意味します。上記の割り当ては次と同等です。

コードをコピー コードは次のとおりです:
C('USER_ID',1);
C('USER_TYPE',1);

パラメータを取得
します。 設定されたパラメータを取得するには、以下を使用できます。

コードをコピー コードは次のとおりです。
$userId = C('USER_ID'); $userType = C('USER_TYPE');

USER_ID パラメータが定義されていない場合は、NULL が返されます。
また、次のような二次設定パラメータの取得もサポートできます。

コードをコピー コードは次のとおりです:
$userId = C('USER.USER_ID') ;
div>
受信設定パラメータが空の場合は、すべてのパラメータを取得することを意味します。

コードをコピー コードは次のとおりです:
$config = C();

> 設定を保存
する バージョン .1 では、一括割り当て専用の設定パラメータを永続的に保存する機能が追加されました。例:

コードをコピー コードは次のとおりです。
$config['user_id'] = 1; $config['user_type'] = 1;
C($config,'name');

設定パラメータをバッチで設定した後、現在の設定パラメータはすべてキャッシュ ファイル (またはその他の設定されたキャッシュ方法) に保存されます。
保存後、保存したパラメータを取得したい場合は、 を使用できます。

コードをコピー コードは次のとおりです。
$config = C('','name' );
このうち name は先ほどパラメータを保存する際に使用したキャッシュ識別子であり、保存されたパラメータを正しく取得するためには一貫性が必要です。取得されたパラメータは、手動でマージすることなく、現在の構成パラメータとマージされます。

D メソッド

D メソッドは、最も一般的に使用されるメソッドです。これは、カスタム モデル クラスのインスタンス化に使用されます。これは、Think フレームワークによるモデル クラスのインスタンス化のカプセル化であり、シングルトン モードを実装し、プロジェクト間およびグループ呼び出しをサポートします。 . の呼び出し形式は次​​の
ようになります。 D('[プロジェクト://][グループ/]モデル','モデルレイヤー名')
メソッドの戻り値は、インスタンス化されたモデル オブジェクトです。
D メソッドは、モデル クラスを自動的に検出できます。カスタム モデル クラスが存在する場合は、カスタム モデル クラスがインスタンス化されます。存在しない場合は、Model 基本クラスがインスタンス化されます。同時に、インスタンス化されたモデルはインスタンス化されません。繰り返しインスタンス化され、変更されます。
D メソッドの最も一般的な使用法は、現在のプロジェクトのカスタム モデルをインスタンス化することです。例:

コードをコピー コードは次のとおりです:
// User モデルをインスタンス化します
$ユーザー = D('ユーザー');

現在のプロジェクトの下に Lib/Model/UserModel.class. ファイルをインポートし、UserModel クラスをインスタンス化するため、実際のコードは次と同等になる可能性があります。

コードをコピー コードは次のとおりです。
import('@.Model.UserModel');
$User = new UserModel();

ただし、D メソッドを使用する場合、UserModel クラスが存在しない場合は、自動的に呼び出されます。

コードをコピー コードは次のとおりです:
new Model('User');

また、2 回目に呼び出されたときに再度インスタンス化する必要がないため、オブジェクトのインスタンス化のオーバーヘッドをある程度削減できます。
D メソッドは、グループやプロジェクト全体でのモデルのインスタンス化をサポートできます。例:

コードをコピー コードは次のとおりです:
//管理プロジェクトのユーザー モデルをインスタンス化します D('管理者://ユーザー')
// Admin グループの User モデルをインスタンス化します
D('管理者/ユーザー')

注: プロジェクト間呼び出しモデルを実装するには、2 つのプロジェクトのディレクトリ構造が並列していることを確認する必要があります。
バージョン .1 以降、階層モデルのサポートが追加されたため、D メソッドは次のような他のモデルもインスタンス化できます。

コードをコピー コードは次のとおりです。
// UserService クラスをインスタンス化します
$ユーザー = D('ユーザー','サービス');
// UserLogic クラスをインスタンス化します
$User = D('ユーザー','ロジック');

コードをコピー コードは次のとおりです。
D('User','Service');

Lib/Service/UserService.class. がインポートされてインスタンス化されます。これは次のコードと同等です。

コードをコピー コードは次のとおりです。
import('@.Service.UserService');
$User = new UserService();

F メソッド

F メソッドは、実際には S メソッドのサブセットです。単純なデータ キャッシュにのみ使用され、ファイル形式のみをサポートします。キャッシュの有効期間はサポートされません。リターン メソッドを使用するため、効率は S メソッドよりも高くなります。 S 方式であるため、高速キャッシュ方式とも呼ばれます。

F メソッドの特徴は次のとおりです。
単純なデータ キャッシュ。
ファイルとして保存します。
データを返してキャッシュをロードします。
サブディレクトリのキャッシュと自動作成をサポートします。
キャッシュ削除と一括削除をサポートします。
書き込みおよび読み取りキャッシュ

コードをコピー コードは次のとおりです:
F('data','test data') ;
div>
デフォルトの保存開始パスは DATA_PATH です (この定数は、デフォルト構成では RUNTIME_PATH.'Data/' の下にあります)。これは、ファイル名 DATA_PATH.'data.' のキャッシュ ファイルが生成されることを意味します。
注: データの上書きや競合を避けるために、キャッシュ識別子が固有であることを確認してください。
次回キャッシュされたデータを読み取るときは、次を使用します。

コードをコピー コードは次のとおりです。
$Data = F('data');
たとえば、次のようなサブディレクトリに保存できます。

コードをコピー コードは次のとおりです:
F('user/data',$data) ; // キャッシュ書き込み
F('user/data'); // キャッシュの読み取り

DATA_PATH.'user/data.' キャッシュ ファイルが生成されます。user サブディレクトリが存在しない場合は、自動的に作成されます。たとえば、複数レベルのサブディレクトリもサポートできます。

コードをコピー コードは次のとおりです。
F('level1/level2/data',$データ);

キャッシュの開始ディレクトリを指定する必要がある場合は、次の方法を使用できます。

コードをコピー コードは次のとおりです:
F('data',$data,TEMP_PATH) ;
div>
取得するときは、以下を使用する必要があります。

コードをコピー コードは次のとおりです:
F('data','',TEMP_PATH) ;
div>
キャッシュを削除
します。 キャッシュの削除も非常に簡単です。

コードをコピー コードは次のとおりです:
F('data',NULL); ディビジョン> 2 番目のパラメーターとして NULL を渡すことは、データとして識別されたデータ キャッシュを削除することを意味します。
特にサブディレクトリ キャッシュのバッチ削除機能をサポートします。ユーザー サブディレクトリの下にあるすべてのキャッシュ データを削除したいとすると、次のように使用できます。

コードをコピー コードは次のとおりです。
F('user/*',NULL);

または、フィルタ条件を使用して削除します。例:

コードをコピー コードは次のとおりです。
F('user/[^a]*' ,NULL) ;

G メソッド

Thinkphp が長い間、debug_start、debug_end メソッド、さらには Debug クラスを通じて完了する必要がある機能が、バージョン 3.1 では単純な G メソッドに置き換えられました。これは素晴らしいアップグレードです。
G 法の機能には、マーキング位置と間隔統計の 2 つの機能があります。具体的な使用方法を見てみましょう。
場所をマーク
します。 G メソッドの最初の使用法は、位置をマークすることです。例:

コードをコピー コードは次のとおりです:
G('begin');

> 現在位置が開始タグとしてマークされ、現在位置の実行時間が記録されることを示します。環境がサポートしている場合は、メモリ使用量も記録できます。 G メソッド マーカーはどこからでも呼び出すことができます。
実行時間の統計
位置をマークした後、G メソッドを再度呼び出して間隔統計を実行できます。例:

コードをコピー コードは次のとおりです:
G('begin');
// ...その他のスニペット
G('終了');
// ...ここに他のコードがあるかもしれません
// 統計間隔を実行します
echo G('begin','end').'s';

G('begin','end') は、開始位置から終了位置までの実行時間をカウントすることを意味します (単位は秒)。開始位置はマークされた位置でなければなりません。この時点で終了位置がマークされていない場合は、現在の位置が自動的に終了タグとしてマークされ、出力結果は次のようになります。

コードをコピー コードは次のとおりです:
0.0056s

デフォルトの統計精度は小数点以下 4 桁です。この統計精度が十分ではないと思われる場合は、次のように設定することもできます。

コードをコピー コードは次のとおりです。
G('begin','end',6 ).'s';

考えられる出力は次のようになります。

コードをコピー コードは次のとおりです:
0.005587s

メモリオーバーヘッドの統計
環境がメモリ使用量統計をサポートしている場合は、G メソッドを使用して、間隔メモリ オーバーヘッド統計 (単位: kb) を実行することもできます。例:

コードをコピー コードは次のとおりです。
echo G('begin','end', 'm' ).'kb';

3 番目のパラメータは、m を使用してメモリ オーバーヘッド統計を示します。出力結果は次のようになります。

コードをコピー コードは次のとおりです:
625kb

同様に、終了タグがマークされていない場合は、最初に現在位置が自動的に終了タグとしてマークされます。
環境がメモリ統計をサポートしていない場合、このパラメータは無効であり、インターバル実行時間統計は引き続き実行されます。
debug_start と debug_end のことは忘れてください。シンプルさが一番大切ですよ~

I メソッド

Thinkphp の I メソッドはバージョン 3.1.3 の新機能です。以前の 3.* バージョンを使用している場合は、3.1 クイック スタート チュートリアル シリーズの変数部分を直接参照できます。
概要
ご覧のとおり、I メソッドは Thinkphp の多数の 1 文字関数の新しいメンバーです。その名前は英語の入力 (input) に由来しています。主にシステム入力変数をより便利かつ安全に取得するために使用されます。どこでも使用できます。 . 利用形式は以下の通り
です。 I('変数の種類.変数名',['デフォルト値'],['フィルタ方法'])
変数タイプとは、次のようなリクエスト メソッドまたは入力タイプを指します。
get GETパラメータを取得
post POSTパラメータを取得
param は、GET、POST、または PUT パラメータを取得するリクエストのタイプを自動的に決定します
リクエストは REQUEST パラメータを取得します
put は PUT パラメータを取得します
セッションは $_SESSION パラメータを取得します
Cookie は $_COOKIE パラメータを取得します
サーバーは $_SERVER パラメータを取得します
globals は $GLOBALS パラメータを取得します
注: 変数の型では大文字と小文字が区別されません。
変数名では大文字と小文字が厳密に区別されます。
デフォルト値とフィルタリング方法はどちらもオプションのパラメータです。
使い方
について 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 $_GET 配列全体

同様に、post または他の入力タイプの変数を取得できます。例:

コードをコピー コードは次のとおりです。
1.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 の場合は GET['id'] と同等、現在のリクエスト タイプが POST または PUT の場合は _POST['id'] または PUT パラメータ ID の取得と同等です。
また、param タイプの変数は、デジタル インデックスを使用して URL パラメータを取得することもできます (PATHINFO モード パラメータは、GET か POST かに関係なく有効である必要があります)。次に例を示します。
現在のアクセス URL アドレスはです。

コードをコピーします コードは次のとおりです:
http://serverName/index./New/ 2013/06 /01

そうすれば合格できます

コードをコピー コードは次のとおりです。
echo I('param.1'); / / アウトプット 2013
echo I('param.2'); // 出力 06
echo I('param.3'); // 出力 01

実際、param 変数型の記述方法は次のように簡略化できます。

コードをコピー コードは次のとおりです:
I('id'); // と同等です。私('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 が自動的に使用されます)。それ以外の場合は、組み込みfilter_var メソッドはフィルタリングのために呼び出されます。例:
コピーコード コードは次のとおりです。
I('post.email','',FILTER_VALIDATE_EMAIL);

$_POST['email'] の形式が検証されることを示し、要件を満たさない場合は空の文字列が返されます。
(その他の検証形式については、filter_var の使用に関する公式マニュアルを参照してください。)
または、次の文字識別を使用することもできます。
コピーコード コードは次のとおりです。
I('post.email','','email' );
サポートされるフィルター名は、filter_list メソッドの有効な値である必要があります (サーバー環境が異なると異なる場合があります)。サポートされるフィルター名としては次のものが考えられます。
コピーコード コードは次のとおりです。
int
ブール値
浮き
ます。 validate_regexp
検証URL
validate_email
検証_ip
文字列
剥がされた
エンコード
された 特別な文字
安全でない_生
メール
で URL
数値_int
数値_浮動小数点
魔法の引用
コールバック

一部の特殊なケースでは、DEFAULT_FILTER が設定されている場合でも、フィルタリングを実行したくない場合があります。

コードをコピー コードは次のとおりです。
I('get.name','', NULL);

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

L メソッド

L メソッドは、複数の言語が有効になっている場合に、現在の言語定義を設定および取得するために使用されます。
呼び出し形式:L('言語変数',['言語値'])
言語変数を設定
する 言語パッケージを使用して言語変数を定義するだけでなく、L メソッドを使用して言語変数を動的に設定することもできます。例:

コードをコピー コードは次のとおりです:
L('LANG_VAR','言語定義') ;
div>
言語定義では大文字と小文字が区別されないため、以下も同等です。

コードをコピー コードは次のとおりです:
L('lang_var','言語定義') ;
div>
ただし、標準化のため、言語変数の定義には大文字を使用することをお勧めします。
L メソッドは、次のような言語変数のバッチ設定をサポートしています。

コードをコピー コードは次のとおりです:
$lang['lang_var1'] = '言語定義1分;
$lang['lang_var2'] = '言語定義 2';
$lang['lang_var3'] = '言語定義 3';
L($lang);

3 つの言語変数 lang_var1、lang_var2、lang_var3 が同時に設定されることを示します。
[-続き-]
言語変数を取得する

コードをコピー コードは次のとおりです。
$langVar = L('LANG_VAR');
または:

コードをコピー コードは次のとおりです。
$langVar = L('lang_var ');

パラメータが空の場合は、現在定義されているすべての言語変数 (言語定義ファイル内の変数を含む) を取得することを意味します。

コードをコピー コードは次のとおりです:
$lang = L();

> または、テンプレートで使用することもできます。

コードをコピー コードは次のとおりです:
{$Think.lang.lang_var}

言語定義を出力します。

M メソッド

M メソッドは、基本モデル クラスのインスタンスを作成するために使用されます。D メソッドとの違いは次のとおりです。
モデルクラスをカスタマイズする必要がなく、IO 負荷が軽減され、パフォーマンスが向上します。
、インスタンス化後に呼び出せるのは、基本モデル クラス (デフォルトは Model クラス) のメソッドのみです。
、インスタンス化時にテーブルのプレフィックス、データベース、データベース接続情報を指定できます。
D メソッドの能力は、カプセル化するカスタム モデル クラスの強力さに反映されます。しかし、Think フレームワークの新しいバージョンの基本モデル クラスがますます強力になるにつれて、M メソッドはより実用的になってきています。 Dメソッド。
M メソッドの呼び出し形式:
M('[基本モデル名:]モデル名','データテーブルプレフィックス','データベース接続情報')
M メソッドの具体的な用途を見てみましょう。
, 基本モデル(Model)クラスをインスタンス化
します。 モデルが定義されていない場合は、次のメソッドを使用して、操作用のモデル クラスをインスタンス化できます。

コードをコピー コードは次のとおりです:
//User モデルをインスタンス化します
$ユーザー = M('ユーザー');
//その他のデータ操作を実行します
$User->select();

この方法は、モデル クラスを定義する必要がなく、プロジェクト間の呼び出しをサポートするため、最も単純かつ効率的です。また、カスタム モデル クラスがないため、関連するビジネス ロジックを作成できず、基本的な CURD 操作のみを完了できるという欠点もあります。

コードをコピー コードは次のとおりです。
$User = M('User');
実際、これは次と同等です。

コードをコピー コードは次のとおりです。
$User = new Model('User');

think_user テーブルの操作を示します。 M メソッドも D メソッドと同様にシングルトン関数を持ち、複数回呼び出されても繰り返しインスタンス化されません。 M メソッドのモデル名パラメーターは、データ テーブルに変換されるときに自動的に小文字に変換されます。これは、Think のデータ テーブルの命名仕様がすべて小文字の形式であることを意味します。
、他のパブリックモデルクラスをインスタンス化
します。 最初のインスタンス化方法にはモデル クラス定義がないため、追加の論理メソッドをカプセル化するのは困難ですが、ほとんどの場合、いくつかの共通ロジックを拡張するだけで十分なため、次の方法を試すことができます。

コードをコピー コードは次のとおりです。
$User = M('CommonModel:User') ;
div>
使用法を変更することは、実際には以下と同等です。

コードをコピー コードは次のとおりです。
$User = new CommonModel('User');

システムのモデル クラスは自動的にロードできるため、インスタンス化前にクラス ライブラリを手動でインポートする必要はありません。モデル クラス CommonModel は Model を継承する必要があります。 CommonModel クラスでいくつかの共通の論理メソッドを定義できるため、データ テーブルごとに特定のモデル クラスを定義する必要がなくなります。プロジェクトに既に 100 を超えるデータ テーブルがある場合、そのほとんどは基本的なものです。CURD 操作の場合、一部のモデルのみがデータ テーブルを定義します。カプセル化する必要がある複雑なビジネス ロジックがあるため、最初の方法と 2 番目の方法を組み合わせるのが良い選択です。

、テーブルのプレフィックス、データベース、その他の情報を渡します

M メソッドには 3 つのパラメーターがあります。最初のパラメーターはモデル名 (基本的なモデル クラスとデータベースを含めることができます)、2 番目のパラメーターはデータ テーブルのプレフィックスを設定するために使用されます (テーブルのプレフィックスを取得するには空白のままにします) 3 番目のパラメータは、現在使用されているデータベース接続情報を設定するために使用されます (現在のプロジェクトで設定されているデータベース接続情報を取得するには空白のままにします)。例:

コードをコピー コードは次のとおりです。
$User = M('db2.User', 'think_' );

Model モデル クラスをインスタンス化し、db2 データベース内の think_user テーブルを操作することを示します。
2 番目のパラメータが空白のままか渡されない場合は、現在のプロジェクト設定でデータ テーブル プレフィックスを使用することを意味します。操作されているデータ テーブルにテーブル プレフィックスがない場合は、以下を使用できます。

コードをコピー コードは次のとおりです。
$User = M('db1.User', null);

Model モデル クラスのインスタンス化と、db1 データベース内のユーザー テーブルの操作を表します。
操作するデータベースに別のユーザー アカウントが必要な場合は、次のようにデータベース接続情報を渡すことができます。

コードをコピー コードは次のとおりです。
$User = M('User','think_ ',' mysql://user_a:1234@localhost:3306/think');

Model は基本モデル クラスを表すために使用され、think_user テーブルが操作され、user_a アカウントがデータベースへの接続に使用され、操作データベースは think です。
3 番目の接続情報パラメーターは、DSN 構成またはアレイ構成を使用でき、構成パラメーターもサポートできます。
たとえば、プロジェクト設定ファイルで次のように設定します。

コードをコピー コードは次のとおりです。
'DB_CONFIG'=>'mysql://user_a :1234@ localhost:3306/think';

その後、以下を使用できます。

コードをコピー コードは次のとおりです。
$User = M('User','think_ ',' DB_CONFIG');

基本モデルのクラスとデータベースは、たとえば次のように一緒に使用できます。

コードをコピー コードは次のとおりです。
$User = M('CommonModel:db2.User ',' think_');

階層モデルをインスタンス化したい場合は、パブリック モデル クラスを使用できます。

コードをコピー コードは次のとおりです。
M('UserLogic:User');ディビジョン> UserLogic をインスタンス化します。これはあまり意味がありませんが、使用できるためです。

コードをコピー コードは次のとおりです。
D('User','Logic');

同じ機能を実現します。

R メソッド

R メソッドは、特定のコントローラーの操作メソッドを呼び出すために使用されます。これは、A メソッドをさらに拡張および補足するものです。方法Aの使用方法はこちらをご覧ください。
R メソッドの呼び出し形式:
R('[プロジェクト://][グループ/]モジュール/オペレーション','パラメーター','コントローラー層名')
たとえば、操作メソッドを次のように定義します。

コードをコピー コードは次のとおりです。
class UserAction extends Action {
パブリック関数の詳細($id){
M('ユーザー')->find($id);
を返します。 }
}

その後、R メソッドを介して他のコントローラーでこの操作メソッドを呼び出すことができます (通常、R メソッドはモジュール間の呼び出しに使用されます)。

コードをコピー コードは次のとおりです。
$data = R('User/detail', array(' 5'));

ユーザー コントローラーの詳細メソッドが呼び出され (詳細メソッドはパブリック型である必要があります)、戻り値は ID 5 のユーザー データをクエリすることを示します。呼び出したい操作メソッドにパラメータがない場合は、2 番目のパラメータを空白のままにして直接使用できます。

コードをコピー コードは次のとおりです。
$data = R('User/detail') ;
div>
また、グループ間およびプロジェクト間での通話もサポートできます。例:

コードをコピー コードは次のとおりです。
R('Admin/User/detail',array ('5 '));

Admin グループの下の User コントローラーの詳細メソッドを呼び出すことを示します。

コードをコピー コードは次のとおりです。
R('Admin://User/detail' ,array( '5'));

Admin プロジェクトの下で User コントローラーの詳細メソッドを呼び出すことを示します。
公式の推奨事項は、論理的混乱を引き起こすため、同じレイヤー上であまりにも多くの呼び出しを行わないようにすることです。公的に呼び出される部分は、別個のインターフェイスにカプセル化する必要があります。3.1 マルチレイヤー コントローラーの新機能を使用して、別個のコントローラー層を追加できます。たとえば、インターフェース呼び出しの場合、Api コントローラー層を追加します。

コードをコピー コードは次のとおりです。
class UserApi extends Action {
パブリック関数の詳細($id){
M('ユーザー')->find($id);
を返します。 }
}

次に、R メソッド呼び出しを使用します。

コードをコピー コードは次のとおりです。

$data = R('ユーザー/詳細',array('5'),'Api');

言い換えると、R メソッドの 3 番目のパラメーターは、呼び出しのコントローラー層の指定をサポートしています。
同時に、R メソッドは、操作メソッドを呼び出すときに操作サフィックス設定 C ('ACTION_SUFFIX') をサポートできます。操作メソッド サフィックスを設定しても、R メソッドの呼び出しメソッドを変更する必要はありません。

S メソッド

S メソッドは、次のような現在のキャッシュ メソッドのキャッシュ パラメータの受け渡しもサポートしています。

コピーコード コードは次のとおりです。

S('data',$Data,3600,'File',array('length'=>10,'temp'=>RUNTIME_PATH.'temp/'));

テストの結果、この方法で使用した場合、最初の 3 つのパラメータのみが有効で、残りは無効です
コピーコード コードは次のとおりです。

{ 'ファイル',array('length'=>10,'temp'=>RUNTIME_PATH.'temp/')}

最後にこれを使用しました。
コピーコード コードは次のとおりです。

S('data1',$list,array('prefix'=>aaa','expire'=>'3600','temp'=>RUNTIME_PATH.'temp/1236'));

入手時
コピーコード コードは次のとおりです。

$sdata = S('data1','',array('prefix'=>'aaa','temp'=>RUNTIME_PATH.'temp/1236'));

T メソッド

テンプレート ファイルをより便利に出力するために、新しいバージョンでは、テンプレート ファイル名を生成する T 関数がカプセル化されています。
使用方法:
T([Resource://][Module@][Theme/][Controller/]Operation,[View Hierarchy])
T 関数の戻り値は完全なテンプレート ファイル名であり、出力をレンダリングするための表示およびフェッチ メソッドで直接使用できます。
例:

コピーコード コードは次のとおりです。

T('パブリック/メニュー');
// 現在の module/View/Public/menu.html に戻ります
T('青/パブリック/メニュー');
// 現在の module/View/blue/Public/menu.html を返します
T('パブリック/メニュー','Tpl');
// 現在の module/Tpl/Public/menu.html を返します
T('パブリック/メニュー');
// TMPL_FILE_DEPR が _ の場合、現在の module/Tpl/Public_menu.html を返します
T('パブリック/メニュー');
// TMPL_TEMPLATE_SUFFIX が .tpl の場合、現在の module/Tpl/Public/menu.tpl を返します
T('Admin@Public/menu');
// Admin/View/Public/menu.html に戻ります
T('Extend://Admin@Public/menu');
// Extend/Admin/View/Public/menu.html に戻ります (Extend ディレクトリは AUTOLOAD_NAMESPACE の設定によって異なります)

T 関数を表示メソッドで直接使用します。
コピーコード コードは次のとおりです。

//T関数を使用してテンプレートを出力
$this->display(T('Admin@Public/menu'));

T 関数は、さまざまなビュー階層テンプレートを出力できます。

U メソッド

U メソッドは、URL アドレスの組み立てを完了するために使用されます。その特徴は、現在の URL モードと設定に基づいて、対応する URL アドレスを自動的に生成できることです。形式は次のとおりです。
U('アドレス','パラメータ','疑似静的','ジャンプするかどうか','表示ドメイン名');

ハードコードされた URL アドレスを修正する代わりにテンプレートで U メソッドを使用する利点は、環境が変わったりパラメータ設定が変更された場合でも、テンプレート内のコードを変更する必要がないことです。

テンプレート内の呼び出し形式は {:U('address', 'parameter'...)} である必要があります。

U メソッドの使用例:

コードをコピー コードは次のとおりです。

U('User/add') // Userモジュールの追加操作アドレスを生成

グループ通話もサポートできます。

コピーコード コードは次のとおりです。

U('Home/User/add') // HomeグループのUserモジュールの追加操作アドレスを生成

もちろん、現在のモジュールの呼び出しを示す操作名を単に記述することもできます。

コードをコピー コードは次のとおりです。

U('add') // 現在のアクセスモジュールの追加操作アドレスを生成します

グループ、モジュール、操作の名前に加えて、いくつかのパラメータを渡すこともできます。

コードをコピー コードは次のとおりです。

U('Blog/readid=1') // ブログモジュールの読み取り操作とID 1のURLアドレスを生成します

U メソッドの 2 番目のパラメータは、受信パラメータをサポートし、配列と文字列の 2 つの定義メソッドをサポートします。文字列パラメータのみの場合は、最初のパラメータで定義できます。次のメソッドはすべて同等です。:

コードをコピー コードは次のとおりです。

U('ブログ/cate',array('cate_id'=>1,'status'=>1))
U('ブログ/cate','cate_id=1&status=1')
U('ブログ/catecate_id=1&status=1')

ただし、次の定義メソッドではパラメータを渡すことはできません。

コードをコピー コードは次のとおりです。

U('ブログ/cate/cate_id/1/status/1')

プロジェクトの異なる URL 設定に従って、同じ U メソッド呼び出しで、次のような異なる URL アドレス効果をインテリジェントに生成できます。

コードをコピー コードは次のとおりです。

U('ブログ/readid=1')

この定義は一例です。
現在の URL が通常モードに設定されている場合、最後に生成された URL アドレスは次のとおりです。

コードをコピー コードは次のとおりです。

現在の URL が PATHINFO モードに設定されている場合、同じメソッドで生成される最終 URL は次のようになります: http://サーバー名 /index./Blog/read/id/1
現在の URL が REWRITE モードに設定されている場合、同じ方法で最終的に生成される URL アドレスは次のようになります: http://serverName/Blog/read /id /1
PATHINFO 区切り文字も設定した場合:

コードをコピー コードは次のとおりです。

「URL_PATHINFO_DEPR」=>「_」

生成されます

コードをコピー コードは次のとおりです。

現在の URL が REWRITE モードに設定され、擬似静的サフィックスが html に設定されている場合、同じメソッドで生成される最終的な URL アドレスは次のようになります。

コードをコピー コードは次のとおりです。

複数の擬似静的サポートが設定されている場合、最初の擬似静的サフィックスが URL アドレスの末尾に自動的に追加されます。もちろん、U メソッドで生成される擬似静的サフィックスを手動で指定することもできます例:

コードをコピー コードは次のとおりです。

U('ブログ/読み取り','id=1','xml')

生成されます

コードをコピー コードは次のとおりです。

U メソッドはルーティングもサポートできます。ルーティング ルールを定義すると、次のようになります。

コードをコピー コードは次のとおりです。

'news/:id\d'=>'ニュース/読む'

それでは使用できます

コードをコピー コードは次のとおりです。

う('/news/1')

最終的に生成される URL アドレスは次のとおりです。

コードをコピー コードは次のとおりです。

アプリケーションに複数のサブドメインの操作アドレスが含まれる場合は、U メソッドでアドレスを生成する必要があるドメイン名を指定することもできます。

コードをコピー コードは次のとおりです。

@ の後に指定する必要があるドメイン名を渡すだけです。
さらに、U メソッドの 5 番目のパラメーターが true に設定されている場合、現在のドメイン名が自動的に認識され、現在のアドレスのサブドメイン名がサブドメイン名の展開設定 APP_SUB_DOMAIN_DEPLOY および APP_SUB_DOMAIN_RULES に基づいて自動的に生成されることを意味します。
URL_CASE_INSENSITIVE がオンの場合、小文字の URL アドレスが均一に生成されます。

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